在开幕时不好流?

时间:2012-10-08 01:58:03

标签: c++ file stream standard-library

当我以二进制模式打开文件时,是否存在is_open()truegood()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();
}

1 个答案:

答案 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,否则返回空指针