91
После создания объекта класса оfstream и попытки открыть его программа
проверяет, была ли операция открытия файла успешной. Фрагмент программы
имеет вид
if (!fout)
{
cerr << "Невозможно открыть файл"<< endl ;
exit(1);
}
Если файл не открывается, то об этом выводится сообщение и вызывается
функция exit() для завершения программы. Аргумент 0 функции exit( ) означа-
ет, что программа завершена
нормально, а любое другое значение указывает
среде окружения, что программа завершена по ошибке. Если файл открылся ус-
пешно, то программа начинает обрабатывать данные. Следующий оператор за-
прашивает пользователя о вводе различных полей каждой записи или информа-
цию о конце файла, если ввод данных завершен:
cout << "Введите счет имя сумму"<<endl
<<"Введите
EOF для окончания ввода "<<endl<<"?";.
Строка while (cin>>accout >>name>>sum) вводит каждый набор данных и
определяет, не введен ли признак конца файла. Когда достигнут признак конца
файла или вводятся неверные данные, условное выражение возвращает 0 и опе-
ратор while завершает свою работу. После этого файл закрывается явным обра-
зом с помощью функции-элемента clouse: fout.close();.
Для чтения файла последовательного доступа его открывают путем создания
объекта класса ifstream. Объекту передаются два аргумента – имя файла и ре-
жим открытия файла. Объявление
ifstream fin (“clients.dat”, ios::in);
создаёт объект fin класса ifstream, связанный с файлом clients.dat, который от-
крывается для чтения. По умолчанию объекты класса ifstream открыты для
чтения, поэтому для открытия файла
clients.dat для чтения может быть исполь-
зован оператор
ifstream fin (“clients.dat”); .
Строка while (fin>>accout >>name>>sum) читает из файла набор данных,
т.е. записи. Всякий раз, когда выполняется оператор while, считывается сле-
дующая запись из файла. Записи выводятся на экран с помощью функции out-
put(), которая использует параметризованные манипуляторы потока для форма-
тирования данных,
изображаемых на экране. Когда достигается конец файла,
входная последовательность в операторе while возвращает 0, и программа вы-
ходит из цикла. Файл закрывается оператором close(), и программа завершает
свою работу.
При поиске данных в последовательном файле программа начинает чтение
данных с начала файла и читает все данные последовательно до тех пор, пока
не
будут найдены требуемые данные. Это приводит к необходимости обрабаты-
вать файл последовательно несколько раз (каждый раз с начала), если искомые
данные расположены в разных местах файла. Классы istream и оstream содер-
жат функции-элементы для позиционирования, которые определяют порядко-