поведение open (file) в I / O - PullRequest
0 голосов
/ 15 марта 2020

При выполнении этих кодов:

std::fstream f;
if(f.open("n",std::fstream::in))           //ERROR

Получена ошибка:

не удалось преобразовать 'f.std :: basic_fstream :: open (((const char * ) "n"), (((std :: ios_base :: openmode) std :: ios_base :: in)) 'из' void 'в' bool '

Но при запуске того же кода с filebuf объект работает нормально:

std::filebuf f;
if(f.open("n",std::fstream::in))          //works fine

почему это происходит, когда оба объекта fstream и filebuf могут использоваться для вызова open?

1 Ответ

1 голос
/ 15 марта 2020

fstream имеет свой собственный метод open (который вызывает filebuf::open внутри) и просто решает ничего не возвращать. Если файл не может быть открыт, он будет отражен в «состоянии потока», которое вы можете проверить, выполнив if (f.fail()) после вызова open.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...