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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
有关C和linux下fopen的打开模式
fopen的模式
C/C++打开文件函数fopen和fopen_s用法的比较
C/C++打开文件函数fopen和fopen_s用法的比较 语言:C/C++ 测试环境:VS2013 由于VS的高版本对文件操作的安全性有了较高的要求,所以会出现如下情况: 1、fopen的用法: 2、fopen_s的用法: 探讨比较:  1.fopen_s的安全是在于比函数fopen多了溢出检测。
windows系统下C语言fopen打开文件路径介绍
打开当前工程所在文件夹的上一级目录中的MakeData文件夹中的data.txt文件的四种方法: 1:FILE *fp_unsort_file = fopen("..\\MakeData\\data.txt","r"); 2:FILE *fp_unsort_file = fopen("..\\MakeData/data.txt","r"); 3:FILE *fp_unsort_file =
C语言fopen()函数:打开一个文件并返回文件指针
头文件:#include fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:     FILE * fopen(const char * path, const char * mode); 【参数】path为包含了路径的文件名,mode为文件打开方式。 mode有以下几种方式: 打开方式 说明 r 以只读方式打开文件,该文件必须存
fopen独占方式操作文件
C API fopen打开的文件无法以独占方式操作文件,此代码利用Windows API巧妙的解决了该问题
linux下fopen无法打开文件解决办法
首先 <?php echo shell_exec("id -a"); ?> 获取执行php的用户账号和所属组,之后
fopen文件方式与二进制方式打开文…
C语言fopen()打开文本文件与二进制文件的区别 在学习C语言fopen()函数后,知道它的第二个参数是标志字符串。如果字符串中出现'b',则表明是以打开二进制(binary)文件,否则是打开文本文件。 那么什么是文本文件,什么是二进制文件呢? 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。       ASCII文件也称为文本文件,这种文件在磁
关于C打开文件失败
C语言可以做到使用文件的多种方式,例如打开一个用于读取的文本文件,创建一个用于写入的文本文件,附加一个文本文件等等。现在我们讨论一下关于使用C语言打开文件错误的情景。   fopen函数用来打开一个文件,其有固定的调用形式:文件指针名=fopen(文件名,"r"),我们这里讨论打开所以是"r",如有其他操作则给fopen传入相应的使用文件方式,例如附加一个文本是"rb"。文件名必须被声明为FILE
关于fopen函数中的打开模式(以写的方式总是打开失败)
今天编程时需要实现这样一个功能:用fopen创建一个写文件并写入内容,但是无论怎么改变参数都是打开失败,分别用过w、wb、w+、wr,都不行,后来网上查资料时看到这么一句“有些C编译系统可能不完全提供所有这些功能,有的C版本不用”r+”,”w+”,”a+”,用”rw”,”wr”,”ar”等,读者注意所用系统的规定。”就换成了rw试试,结果成功了,我也是醉了。
用函数fopen_s打开数据文件
## **用函数fopen_s打开数据文件** ##学习C语言,对文件的输入和输出,打开一个数据文件,一般教材用fopen函数,但是一些编译器编译无法通过,笔者用的Vs2013,提示用fopen_s函数代替,fopen_s函数怎么用呢? 例子选自谭浩强老师的《C语言程序设计(第四版)》(其实我觉得叫做C语言入门更贴切),[例10.1] 从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#