C++的fstream如何检查一个文件是不是成功打开?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++的fstream如何检查一个文件是不是成功打开?相关的知识,希望对你有一定的参考价值。

测试文件打开是否成功:如果文件打开有错误,比如读取一个不存在的文件,当然对于写入文件来说不会出错,因为写入一个不存在的文件时会创建该文件。测试文件打开是否成功可以直接对流进行测试,因为文件打开失败时会把ios::failbit位设为1,所以也可以调用流中的fail()函数来检测文件打开是否成功。比如可以这样测试文件ifstream
hy(“hhh.txt”);
直接对流进行测试比如while(hy)表示文件打开成功则执行循环,或者测试fail函数比如while(hy.fail());表示打开失败则执行循环,当读取文件到达文件尾时程序会把ios::eofbit位设为1。
现行的检测方法is_open()函数,如果文件打开成功则反回true否则反回flash,is_open函数是成员函数,使用时需要使用流类的对象来调用。对于过去一般使用常规的good(),fail()函数来检查文件是否打开成功,而现在新式的is_open()函数同样能实现上述这些函数的功能,而且还能提供这些函数无法实现的功能,比如以一个不合适的文件模式打开文件失败时,这时只有good()和is_open()能检测到这种错误。
参考技术A LZ
的的意思是不是测试一个已经存在的文件是否打成功呢
如果是这样,就用
ifstream
绑定该文件作测试就好了,在文件不存在的时候,它的
failbit
位设置为
1,代码如下:
#include
//
先测试文件是否存在
std::iftream
testfile("c:\\123.txt");
if(!testfile)

std::cerr
<<
"Error!"
<<
endl;
return
-1;

//
通过测试,则打开文件
testfile.close();
testfile.clear();
std::ofstream
f("c:\\123.txt")

ofstream
绑定文件,文件不存在会自动创建而不会设置出错状态。
参考技术B 用is_open()函数,打开成功则返回1,失败则返回0;
其他的判断方案都不准确,比如fail()函数,good()函数等等,
因为当第一次打开文件失败的时候,fail函数返回1,good函数返回0,之后就算你重新再打开其他的文件成功了,fail函数仍然返回1,good函数仍然返回0,所以,用fail函数和good函数不准确。
参考技术C 换个方法试试吧:
先测试是否能北作为可读文件打开:
ifstream
fin("123.txt")
if(!fin)
cout<<"Error!"<
评论
0
0
加载更多本回答被提问者采纳

以上是关于C++的fstream如何检查一个文件是不是成功打开?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 std::fstream 返回 void 而不是 bool

fstream 中判断是否成功打开文件

c++使用文件流fstream换行符的保存,该如何解决

C++fstream问题,如何判断一个文件是不是为空

不计算程序中的最低和最高成绩。 (c++) (fstream)

关闭 fstream 是不是保证文件系统同步?