2 huangvito HuangVito 于 2015.07.24 19:49 提问

c/c++,使用fopen()打开文件

用fopen()打开文件,第二个参数“rb+”。当文件不存在时,程序直接崩溃了,try…catch捕捉不到。有没有什么办法,当文件不存在时,程序可以自己创建一个?(用“wb+”当参数,无论文件存在不存在,都会新建一个文件,只是原来的文件会被覆盖掉)

7个回答

laizx
laizx   2015.07.24 19:59

不会崩溃吧,你这样写:

if( (fp=fopen("filename","r+b")) == NULL )
{
printf("open file error!\n");
return;
}

判断一下打开后的返回值就可以了

K346K346
K346K346   2015.07.24 20:56

建议楼主百度百科查看fopen函数的参数说明和函数的用法。用"r+b"应该没有错。以二进制读写的方式打开。若想不覆盖则使用append模式,即”a+b”

oyljerry
oyljerry   Ds   Rxr 2015.07.24 20:59

你用ab+,这样文件不存在就创建,存在就可以读取,写内容的话就会写入文件末尾。

caozhy
caozhy   Ds   Rxr 2015.07.24 23:19
 WIN32_FIND_DATA wfd;
bool rValue = false;
HANDLE hFind = FindFirstFile(文件名, &wfd);
if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
    文件存在,继续你的操作
}
xianyonge
xianyonge   2015.07.25 02:31

估计你的程序在文件不存在的情况下,继续执行,导致的程序崩溃,所以要进行文件是否存在判断
在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 
VisualEleven
VisualEleven   Ds   Rxr 2015.07.25 09:04

你写文件的时候先移动文件指针到末尾fseek

AgoniAngel
AgoniAngel   Rxr 2015.08.07 14:10

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

Csdn user default icon
上传中...
上传图片
插入图片