Мы рассмотрели примеры программ, в которых файловые операции ввода и вывода выполнялись с начала файла. Однако если необходимо записать данные в выходной файл, можно добавлять информацию в конец существующего файла. Для открытия файла в режиме дозаписи необходимо использовать второй параметр. Например:
ifstream output_file("FILENAME.EXT", ios::app);
В данном случае параметр ios::app указывает режим открытия файла. Режимы открытия файлов представлены в табл. 6.1.
Таблица 6.1 – Значения режимов открытия.
Режим открытия | Назначение |
ios::app | Открывает файл в режиме добавления, располагая файловый указатель в конце файла |
ios::ate | Устанавливает файловый указатель в конце файла |
ios::in | Указывает открыть файл для ввода |
ios::nocreate | Указывает, если указанный файл не существует, не создавать файл и возвратить ошибку |
ios::noreplace | Указывает, если файл существует, операция открытия должна быть прервана и должна возвратить ошибку |
ios::out | Указывает, что надо открыть файл для вывода |
ios::trunc | Сбрасывает (перезаписывает) содержимое существующего файла |
Чтобы предотвратить перезапись существующего файла следующая инструкция, используя режим ios::noreplace, открывает файл для вывода:
|
|
ifstream output_file("Filename.EXT", ios::out ios::noreplace);
Выполнение операций чтения и записи
Все рассмотренные нами программы выполняли файловые операции над символьными строками, однако такие операции могут выполняться над массивами и структурами данных. В этом случае используются функции read() и write().
При использовании функций read() и write() следует использовать буфер данных, в котором данные будут накапливаться, а затем переписываться. Размер буфера определяется операцией sizeof():
input_file.read(buffer, sizeof(buffer));
output_file.write(buffer, sizeof(buffer));
Следующая программа STRU_OUT.CPP использует функцию write() для вывода содержимого структуры в файл EMPLOYEE.DAT:
#include <iostream.h>
#include <fstream.h>
Void main(void)
{