Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Контроль операций обработки файлов



Контроль операций обработки файлов заключается в проверке состояния потока (обнаружение ошибок) и,если возможно, восстановление потока (очистка ошибок). Рассмотрим средства, проверяющие операции открытия файла, чтения и записи.

Состояние потока оценивается битами класса ios:

goodbit - устанавливается, если операция прошла успешно;

eofbit - устанавливается, если больше нет символов для чтения, т.е. конец файла;

failbit - устанавливается, если операция чтения/записи закончилась с ошибкой; поток можно использовать после сброса бита;

badbit - устанавливается, если операция чтения/записи закончилась ошибкой; возможна потеря символов, но можно попробовать исправить, сбросив бит;

hardbit - устанавливается при неисправимой ошибке.

Восстановление потока,т.е. очистка битов ошибки, осуществля­ется функцией clear:

p.clear(n);, где n - либо код бита (0,1,2,4,8), либо его мнемоническое обозначение; при n=0 происходит очистка всех битов ошибок.

Состояние потока можно проверить различными способами. Проверка состояния потока с обнаружением конкретной ошибки выполняется функцией rdstate, которая возвращает код бита ошибки. Пример:

switch(p.rdstate()) //p - поток

{

case ios::goodbit: //операция успешна,продолжение программы

break;

case ios::eofbit: //конец файла, продолжение программы

break;

case ios::failbit: //ошибка, восстановление потока

break;

case ios::badbit: //ошибка, попытка восстановления потока

break;

case ios::hardbit: //неисправимая ошибка, выход из программы

break;

}

Альтернативным, вторым способом проверки состояния потока яв­ляется использование функций класса ios:

good() - возвращает истину, если установлен goodbit (нет ошибок); возвращает ложь(ноль),если бит не установлен;

eof() - возвращает истину, если установлен eofbit (конец файла); возвращает ложь,если бит не установлен;

fail() - возвращает истину, если установлен failbit,badbit или hardbit; возвращает ложь,если биты не установлены;

bad() - возвращает истину, если установлен badbit или hard­bit; возвращает ложь,если биты не установлены.

Примеры:

if (!p.good()) if (p.fail()) while(!p.eof())

{ { {

cerr<<"Ошибка..."; cerr<<"Ошибка..."; //нет конца файла

exit(-1); //выход exit(-1);//выход...

} } }

Удобен третий способ проверки состояния потока представлени­ем имени потока или операции чтения/записи в виде логического вы­ражения в операторах if, for, while, do-while.

Примеры:

if (p) if (!p)

{ {

//продолжение программы cerr<<"Ошибка...";

... exit(-1);//выход

} }

if (p.read((char*)&z,sizeof(z))) if(!p.read((char*)&z,sizeof(z)))

{ {

//продолжение программы cerr<<"Ошибка чтения...";

... exit(-1);//выход из программы

} }

Имя потока p и операция чтения p.read имеют значение не ноль (истинно), если нет ошибки, и ноль (ложно), если есть ошибка.

Контрольные вопросы

1. Какие имеются способы обозначения комментариев?

2. Что такое директива препроцессора?

3. Что такое управляющая последовательность?

4. Что такое массив?

5. Что такое указатель?

6. Чем отличаются ссылки от указателей?

7. Что такое структура?

8. Что такое перечисление?

9. Что такое операции извлечения (>>) и вставки (<<)?

10. Какие имеются способы форматирования ввода/вывода?

11. Какие средства обработки файлов имеет библиотека потокого ввода/вывода fstream.h?





Дата публикования: 2014-11-26; Прочитано: 229 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...