Аналіз помилок
В цьому прикладі ми визначили наявність помилки вводу/виводу перевіркою значення, що повертається потоковим об’єктом.
if(!is)
//виникла помилка
Тут is повертає значення вказівника, якщо все пройшло без помилок. Інакше повертається 0. Це жорсткий підхід до визначення помилок: неістотно, яка саме помилка виникла, всі помилки обробляються однаково. Тим не менше, за допомогою прапорів статусу помилки ios можна здобутидетальнішу інформацію про помилки файлового вводу/виводу.
Ми вже бачили деякі з цих файлів статусу під час роботи, коли обговорювали виведення на екран і ввід з клавіатури. У програмі 26.11 показано, як можна використати їх при файловому вводі/виводі.
//перевірка помилок відкриття файлу
#include<fstream>
#include<iostream>
#include<conio>
using namespace std;
int main()
{ ifstream file;
file.open("a:test.dat");
if(!file)
cout<<"\nNemozlyvo vidkryty file";
else
cout<<"\nFile vidkrytyj bez pomylok ";
cout<<"\nfile= "<<file;
cout<<"\nKod pomylky="<<file.rdstate();
cout<<"\ngood()="<<file.good();
cout<<"\neof()="<<file.eof();
cout<<"\nfail()="<<file.fail();
cout<<"\nbad()="<<file.bad()<<endl;
file.close();
getch();
return 0;
}
Програма 26.11
Спершу програма перевіряє значення файлового об’єкту. Якщо воно нульове, то файл, можливо, не існує і тому не може бути відкритим. От приклад роботи програми в такій ситуації:
Код помилки, який повертає rdstat(), рівний 4. Це біт, який сповіщає про те, що файл не існує. Функція good() повертає 1 (true) тільки в тому випадку, коли не встановлені ніякі біти помилок, тому в нашому прикладі вона повернула 0 (false). Вказівник файлу встановлюється не на eof, тому відповідна функція повертає 0.
Дата добавления: 2015-08-26; просмотров: 665;