在C++中,是否存在std::ifstream open()可以成功的情况,但std::ifstream good()可能是错误的?
编辑:用g ++ 4.7.1测试
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
std::ifstream filestream("testfile");
std::cout<<filestream.good()<<std::endl;
std::cout<<filestream.eof()<<std::endl;
std::cout<<filestream.fail()<<std::endl;
std::cout<<filestream.bad()<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将返回:1,0,0,0表示空文件,表示good = TRUE和eof = fail = bad = FALSE.这是正常的吗?
在验证标准中的实际文本后,我认为如果实际打开抛出异常,则不允许在:eofbit之后设置(我认为标准并没有真正说明在这种情况下应该发生什么) ; 如果打开失败,或者打开后的查找(如果已设置)失败,则应设置该值;但似乎没有任何可以设置的情况。openbadbitfailbitateeofbit
在这种情况下,调用并不是std::istream::good()一个好的解决方案。(了解 OP 想要实现的目标会很有趣。无论它是什么,调用std::istream::good()可能都不是正确的解决方案。)
如果std::ifstream::good()返回false,则下次输入将失败。如果它返回true,它不会告诉您任何信息:下一个输入可能会成功,但也可能会失败。