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+ 读写打开一个二进制文件,允许读或在文件末追加数据。