Когда я открываю файл в двоичном режиме, существует ли ситуация, когда 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();
}
Нет: конструктор с двумя аргументами std::ifstream
требуется для установки битов сбоя при открытии файла.
§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
в случае успеха нулевой указатель в противном случае
Других решений пока нет …