问题描述
- c/c++,使用fopen()打开文件
-
用fopen()打开文件,第二个参数“rb+”。当文件不存在时,程序直接崩溃了,try…catch捕捉不到。有没有什么办法,当文件不存在时,程序可以自己创建一个?(用“wb+”当参数,无论文件存在不存在,都会新建一个文件,只是原来的文件会被覆盖掉)
解决方案
不会崩溃吧,你这样写:
if( (fp=fopen("filename","r+b")) == NULL )
{
printf("open file error!n");
return;
}
判断一下打开后的返回值就可以了
解决方案二:
建议楼主百度百科查看fopen函数的参数说明和函数的用法。用"r+b"应该没有错。以二进制读写的方式打开。若想不覆盖则使用append模式,即”a+b”
解决方案三:
你用ab+,这样文件不存在就创建,存在就可以读取,写内容的话就会写入文件末尾。
解决方案四:
WIN32_FIND_DATA wfd;
bool rValue = false;
HANDLE hFind = FindFirstFile(文件名, &wfd);
if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
文件存在,继续你的操作
}
解决方案五:
估计你的程序在文件不存在的情况下,继续执行,导致的程序崩溃,所以要进行文件是否存在判断
在C里面推荐两种简单判断文件存在方法。
1. FILE* fh = fopen("hello","r");
if(fh == NULL)
{
printf("%s","can not open the file");
return ;
}
2 . if( (_access( "ACCESS.C", 0 )) == -1 )
{
printf("file no exist");
return ;
}
文件存在返回0,不存在返加-1
解决方案六:
你写文件的时候先移动文件指针到末尾fseek
解决方案七:
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
时间: 2024-09-20 20:54:48