file.is_open()和file.fail()之间的区别

NeD*_*ark 3 c++ error-handling file

初始化file:

ifstream file("filename.txt");
Run Code Online (Sandbox Code Playgroud)

什么是if ( file.is_open() )if (! file.fail() )?之间的区别?

我应该使用什么来确保文件是否已准备好进行I/O?

我们假设变量file包含文件流的对象.

Bri*_*eal 5

is_open()如果先前的调用open()成功并且没有中间调用,则返回true close().在您的示例中,open()从构造函数中调用.

fail()如果failbitbadbit设置,则返回true rdstate.

failbit通常意味着转换失败.例如,您尝试读取整数,但下一个字符是一个字母.流是好的; 你可以阅读下一个角色,它会成功.您不希望failbit在打开文件后立即设置.

badbit 当流已损坏且下一个操作将失败时设置.