ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн
Анализ ошибок
В этом примере мы определили наличие ошибки ввода/вывода проверкой значе- ния, возвращаемого потоковым объектом.
if(!is)
//Возникла ошибка
Здесь is возвращает значение указателя, если все прошло без ошибок. В про- тивном случае возвращается 0. Это жесткий подход к определению ошибок: не имеет значения, какая именно ошибка возникла, все ошибки обрабатываются одинаково. С помощью флагов статуса ошибок ios, тем не менее, можно извлечь более подробную информацию об ошибках файлового ввода/вывода.
Мы уже видели некоторые из этих флагов статуса в работе, когда обсуждали вывод на экран и ввод с клавиатуры. В следующем примере показано, как мож- но использовать их при файловом вводе/выводе.
Листинг 12.15. Программа FERRORS
// ferrors.cpp
// Проверка ошибок открытия файла
#include <fstream> // для файловых функций
#include <iostream>
using namespace std;
int main()
{
ifstream file;
file.open("a:test.dat");
if( !file )
cout << "\nНевозможно открыть GROUP.DAT";
else
cout << "\nФайл открыт без ошибок.";
cout << "\nfile = " << file;
cout << "\nКод ошибки = " << file.rdstate();
cout << "\ngood() = " << file.good();
cout << "\neof() = " << file.eof();
cout << "\nfail() = " << file.fail();
cout << "\nbad() = " << file.bad() << endl;
file.close();
return 0;
}
Вначале программа проверяет значение файлового объекта. Если оно нуле- вое, значит, файл, возможно, не существует и поэтому не может быть открыт. Вот результат работы программы в такой ситуации:
Невозможно открыть GROUP.DAT
file = 0x1c730000
Код ошибки = 4
Good() = 0
eof() = 0
fail() = 4
bad() = 4
Код ошибки, возвращаемый rdstate(), равен четырем. Это бит, который гово- рит о том, что файл не существует. Он устанавливается в единицу. Остальные биты при этом равны нулю. Функция good() возвращает 1 (true) лишь в том случае, когда не установлены никакие биты ошибок, поэтому в нашем примере она вернула 0 (false). Указатель файла находится не на EOF, поэтому eof() воз- вращает 0. Флаги fail() и bad() устанавливаются в ненулевое значение — это их реакция на произошедшую ошибку.
В настоящей, серьезной программе некоторые из этих функций должны ис- пользоваться после каждой операции ввода/вывода, и тогда не останется сомне- ний в том, что все идет как нужно.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
Схожі підручники
- Загальні питання з курсу Економіка підприємства
- Соціологія Навчально-методичний посібник для студентів всіх напрямків (частина 1)
- Загальні питання з курсу Вища Математика
- СЕМІНАРСЬКО-ПРАКТИЧНЕЗАНЯТТЯ з курсу Економіка Підприємства
- Управління проектами (частина 2)
- ВИГОТОВЛЕННЯ НЕМЕТАЛЕВИХ МІНЕРАЛЬНИХ ВИРОБІВ БУДІВЕЛЬНОГО ПРИЗНАЧЕННЯ ТА ТЕХНОЛОГІЇ БУДІВНИЦТВА