В случае ifstream
в С++, при каких условиях установлены флаги failbit
и badbit
?
С++ ifstream failbit и badbit
Ответ 1
Согласно cplusplus.com:
failbit обычно устанавливается операцией ввода, когда ошибка связана с внутренней логикой самой операции, поэтому возможны другие операции с потоком. Хотя badbit обычно устанавливается, когда ошибка связана с потерей целостности потока, которая, вероятно, сохранится, даже если в потоке выполняется другая операция. badbit может быть проверен независимо, вызвав функцию члена bad.
Простыми словами, если вы получите число, когда ожидаете получить письмо, оно failbit
. Если произошла ошибка серьезная, которая нарушает способность читать из потока вообще - это a badbit
.
За исключением упомянутых флагов существует третья довольно похожая - eofbit
. Вы можете проверить состояние, используя несколько функций: ios::fail
, ios::good
и ios::bad
И вы можете познакомиться с библиотекой iostream на ресурсе MSDN.
Наконец, если вы ищете решение правильное, как обрабатывать все биты ошибок и исключения во время чтения из файла (или доступа к некоторому файлу или каталогу), я настоятельно рекомендую вам прочитать очень полную и хорошо написанную статью "Чтение файлов на С++ с использованием ifstream: правильное обращение с badbit, failbit, eofbit и perror(), в в конце которого вы найдете несколько Идеальных решений. Статья заслуживает почитания.