С каждым потоком связана внутренняя переменная состояния. В случае возникновения ошибки устанавливаются определенные биты этой переменной в зависимости от категории ошибки. Существует ряд функций, позволяющих определить состояние потока.
Функция | Назначение |
eof() fail() bad() good() rdstate() clear() | Возвращает ненулевое значение при обнаружении конца файла Возвращает ненулевое значение при обнаружении какой-либо ошибки в потоке, возможно не фатальной: если функция bad() при этом возвращает 0, то, скорее всего, можно продолжать работу с потоком, предварительно сбросив флаг ios::failbit Возвращает ненулевое значение при обнаружении серьезной ошибки ввода-вывода; в этом случае продолжать работу с потоком не рекомендуется Возвращает ненулевое значение, если биты состояния не установлены Возвращает текущее состояние потока в виде одной из констант: ios::goodbit(нет ошибки), ios::eofbit(достигнут конец файла), ios::failbit(возможно, не критическая ошибка форматирования или преобразования), ios::badbit(критическая ошибка) Задает состояние потока; принимает аргумент типа int, который по умолчанию равен 0, что соответствует сбросу всех битов состояния, в противном случае содержит одну или несколько перечисленных в предыдущем пункте констант, объединенных с помощью операции побитового ИЛИ (|) |
Пример:
#include<fstream.h>
void main()
{ int fp;
ifstream fl("file1.doc",ios::in);
if(fl.eof()) fl.clear(); // состояние потока сбрасывается
if(fl.fail())
cerr<<"ошибка при создании файла\n";
if(fl.good()) cin>>fp;
if(!fl) //другой способ обнаружения ошибки
cerr<<"ошибка при создании файла\n";
}