当我以二进制模式打开文件时,是否存在is_open()
为true
但good()
为false
的情况?
bool ok = false;
std::ifstream stream("test.dat", std::ios::binary)
if (stream.is_open())
{
ok = stream.good();//Does a situation exist where the result of this is false ?
stream.close();
}
答案 0 :(得分:1)
否:如果文件打开失败,则需要std::ifstream
的双参数构造函数来设置failbit。
§27.9.1.7[ifstream.cons] / 2
explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);
调用
rdbuf()->open(s, mode | ios_base::in)
。如果该函数返回空指针,则调用setstate(failbit)
。
和,对于open(),
§27.9.1.4[filebuf.members] / 2
basic_filebuf<charT,traits>* open(const char* s, ios_base::openmode mode);
如果成功则返回
this
,否则返回空指针