Скачиваний:
190
Добавлен:
05.07.2021
Размер:
16.53 Mб
Скачать

Тема 4: Файловый ввод-вывод

  1. Понятие файла. Бинарные и текстовые файлы. Преимущества, недостатки, особенности использования.

Сам по себе файл — это группа байтов, сохраненных на некотором устройстве, возможно, магнитной ленте, оптическом диске или жестком диске. Как правило, операционная система управляет файлами, отслеживая их местоположение, размеры, дату их создания, атрибуты доступа и т.п.

Текстовый файл – частный случай бинарного (в котором данные рассчитаны на интерпретацию в качестве текста).

При работе с бинарными данными в качестве второго параметра функциям write() и read() следует передавать параметр ios::binary. Это

необходимо по той причине, что текстовый режим, используемый по умолчанию, допускает иное обращение с данными нежели бинарный. Например, в текстовом режиме специальный символ '\n' занимает два байта (на самом деле это и есть два действия — перевод каретки и перевод строки). Но в бинарном режиме любой байт, ASCII-код которого отличен от 10 (код символа ‘\n’, line feed, перевод строки), переводится двумя байтами.

  1. Файловый ввод/вывод. Действия, необходимые для создания файлового ввода/вывода. Особенности закрытия файлового ввода/вывода и уничтожение входного/выходного потока. Буферизация файлового ввода/вывода.

ПРОСТОЙ ФАЙЛОВЫЙ ВВОД-ВЫВОД

Для выполнения файлового вывода необходимо выполнить следующие действия:

1. создать объект ofstream для управления выходным потоком.

2. ассоциировать этот объект с конкретным файлом.

3. использовать объект для вывода данных в файл (так же, как нужно было бы использовать объект cout).

Если вы создадите два объекта ofstream, то программа создаст два

буфера — по одному для каждого объекта. Объект ofstream накапливает выходные данные программы байт за байтом, а затем, когда буфер заполняется, передает содержимое буфера в файл назначения.

Поскольку дисководы спроектированы для передачи данных более крупными порциями, а не побайтно, буферизованный подход значительно увеличивает скорость передачи данных из программы в файл.

Шаги для чтения из файла похожи на те, которые нужно выполнить для записи в файл. Для начала нужно подключить заголовочный файл fstream.

Затем необходимо объявить объект ifstream и ассоциировать его с именем файла. Для этого можно использовать два оператора или же один:

//Два оператора

ifstream fin; //создать объекта fin типа ifstream

fin.open("flair.txt");//открытие файла flair.txt для чтения

//Один оператор

ifstream fis("flair.dat");//создание объекта fis и его

ассоциирование с файлом flair.txt

Соединение с файлом закрывается автоматически, когда объекты

ввода и вывода уничтожаются, например, при завершении программы.

Кроме того, соединение с файлом можно закрыть явно, используя для

этого метод close():

fout.close(); //закрытие соединения вывода с файлом

fin.close(); //закрытие соединения ввода с файлом

Закрытие файлового соединения не уничтожает поток; оно просто

отключает его от файла. Однако средства управления потоком никуда не исчезают. Например, объект fin продолжает существовать, как и входной буфер, которым он управляет. Этот поток можно заново подключить к тому же или к другому файлу.