ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн

Реагирование на ошибки

Наша следующая программа показывает наиболее удобный способ обработки ошибок. Все дисковые операции проверяются после их выполнения. Если воз- никла ошибка, выводится сообщение об этом, и программа завершает свою рабо- ту. Мы использовали технику, описанную ранее, заключающуюся в проверке значения, возвращаемого из объекта, и определении статуса его ошибки. Про- грамма открывает выходной потоковый объект, записывает целый массив целых чисел единственным вызовом write() и закрывает объект. Затем открывает вход- ной потоковый объект и считывает массив вызовом функции read().

Листинг 12.14. Программа REWERR

// rewerr.cpp

// Обработка ошибок ввода/вывода

#include <fstream>            // для файловых потоков

#include <iostream>

using namespace std;

#include <process.h>          // для exit()

 

const int MAX = 1000;

int buff[MAX];

 

int main()

{

  for(int j=0; j<MAX; j++)    // заполнить буфер данными

    buff[j] = j;

  ofstream os;                // создать выходной поток

                              // открыть его

  os.open("a:edata.dat", ios::trunc | ios::binary);

  if(!os)

    { cerr << "Невозможно открыть выходной файл\n"; exit(1); }

 

  cout << "Идет запись...\n"; // записать в него содержимое

                              // буфера

  os.write( reinterpret_cast<char*>(buff), MAX*sizeof(int) );

  if(!os)

    { cerr << "Запись в файл невозможна\n"; exit(1); }

  os.close();                 // надо закрыть поток

 

  for(j=0; j<MAX; j++)        // очистить буфер

    buff[j] = 0;

 

  ifstream is;                // создать входной поток

  is.open("a:edata.dat", ios::binary);

  if(!is)

    { cerr << "Невозможно открыть входной файл\n";exit(1); }

 

  cout << "Идет чтение...\n"; // чтение файла

  is.read( reinterpret_cast<char*>(buff), MAX*sizeof(int) );

  if(!is)

    { cerr << "Невозможно чтение файла\n"; exit(1); }

 

  for(j=0; j<MAX; j++)        // проверять данные

    if( buff[j] != j )

      { cerr << "\nДанные некорректны\n"; exit(1); }

  cout << "Данные в порядке\n";

  return 0;

}

 

 

34