- •Лабораторная работа №10. Потоки ввода-вывода. Файловые операции
- •1 Цель и порядок работы
- •2 Краткая теория
- •2.1 Потоки ввода-вывода
- •2.2 Файловые потоки
- •2.2.1 Режимы открытия файла
- •2.2.2 Закрытие файла
- •2.2.3 Двоичный режим ввода-вывода
- •2.2.4 Чтение символов и строк
- •2.2.5 Ввод-вывод с произвольным доступом
- •2.3 Примеры программ
- •3 Контрольные вопросы
- •4 Задание
- •5 Варианты заданий
2.2 Файловые потоки
Файловые потоки библиотеки ввода-вывода реализуют объектно-ориентированную методику работы с дисковыми файлами. Имеется три класса таких потоков:
ifstream специализирован для ввода из дисковых файлов.
ofstream специализирован для записи дисковых файлов.
fstream управляет как вводом, так и записью на диск.
Эти классы выводятся соответственно из istream, ostream и iostream. Таким образом, они наследуют все их функциональные возможности (перегруженные операции ”<<” и ”>>” для встроенных типов, флаги форматирования и состояния, манипуляторы и т.д.).
Чтобы работать с файловым потоком, нужен, во-первых, объект потока, а во-вторых, открытый файл, связанный с этим объектом.
Каждый из трех классов файловых потоков имеет четыре конструктора.
Конструктор, создающий объект без открытия файла:
ifstream();
ofstream();
fstream();
Конструктор, создающий объект, открывающий указанный файл и закрепляющий этот файл за потоком. Аргументами являются имя файла, режим открытия и режим защиты (в Windows не используется);
ifstream(const char *name, int mode=ios::in, long prot=0666);
ofstream(const char *name, int mode=ios::out, long prot=0666);
fstream(const char *name, int mode, long prot = 0666);
Конструктор, создающий объект и связывающий с ним уже открытый файл. В качестве аргумента передается дескриптор файла:
ifstream(int file);
ofstream(int file);
fstream(int file);
Конструктор, создающий объект и связывающий с ним уже открытый файл; объект ассоциируется указанным буфером:
ifstream(int file, char *buf, int len);
ofstream(int file, char *buf, int len);
fstream(int file, char *buf, int len);
При использовании конструктора, создающего объект без открытия файла, необходимо дополнительно вызвать метод open(), который позволяет открыть файл с удобным для нас вариантом задания параметров.
2.2.1 Режимы открытия файла
Параметр mode, который имеет вторая форма конструктора, задает режим открытия файла. Для значений параметра класс ios определяет символические константы, перечисленные в таблице 11.3.
Таблица 10.3. Константы класса ios для режимов открытия файла
Константа |
Описание |
арр |
Открытие для записи в конец файла. |
ate |
При открытии позиционирует указатель на конец файла. |
binary |
Файл открывается в двоичном (не текстовом) режиме. |
in |
Файл открывается для ввода. |
out |
Файл открывается для вывода. |
trunc |
Если файл существует, его содержимое теряется. |
Константы можно комбинировать с помощью поразрядного OR. Для конструкторов классов ifstream и ofstream параметр mode имеет значения по умолчанию – соответственно ios::in и ios::out.
2.2.2 Закрытие файла
В классах файловых потоков имеется функция close(), которая сбрасывает содержимое потока и закрывает ассоциированный с ним файл.
Кроме того, деструктор потока автоматически закрывает файл при уничтожении объекта потока.
При ошибке закрытия файла устанавливается флаг failbit.
