- •Классы потоков
- •Листинг 2. Форматирование с помощью манипуляторов
- •Листинг 3. Форматирующие флаги потоков
- •Состояние потока
- •Файловые потоки
- •Листинг 4. Примеры открытия файловых потоков
- •Бесформатный ввод-вывод
- •Класс istream
- •Класс ostream
- •Ввод-вывод с произвольным доступом
- •Листинг 5. Произвольный доступ к файлу
- •Заключение
Файловые потоки
Файловые потоки библиотеки ввода-вывода реализуют объектно-ориентированную методику работы с дисковыми файлами. Имеется три класса таких потоков:
ifstream специализирован для ввода из дисковых файлов.
of stream специализирован для записи дисковых файлов.
fstream управляет как вводом, так и записью на диск.
Эти классы выводятся соответственно из istream, ostream и iostream. Таким образом, они наследуют все их функциональные возможности (перегруженные операции << и>>” для встроенных типов, флаги форматирования и состояния, манипуляторы и т. д.).
Чтобы работать с файловым потоком, нужен, во-первых, объект потока, а во-вторых, открытый файл, связанный с этим объектом.
Конструирование объекта потока
Каждый из трех классов файловых потоков имеет четыре конструктора.
Конструктор, создающий объект без открытия файла:
ifstream () ;
of stream();
fstream () ;
Конструктор, создающий объект, открывающий указанный файл и закрепляющий этот файл за потоком. Аргументами являются имя файла, режим открытия и режим защиты (в Windows не используется):
if stream(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);
Конструктор, создающий объект и связывающий с ним уже открытый файл. В качестве аргумента передается дескриптор файла:
ifstreamfint file);
ofstream(int file);
fstream (int file) ;
Конструктор, создающий объект и связывающий с ним уже открытый файл; объект ассоциируется указанным буфером:
ifstream(int file, char *buf, int len)
of stream(int file, char *buf, int len)
fstream (int file, char *buf, int len)
Режимы открытия файла
Параметр mode, который имеет вторая форма конструктора, задает режим открытия файла. Для значений параметра класс ios определяет символические константы, перечисленные в таблице 5.
Таблица 5. Константы класса ios для режимов открытия файла
Константа |
Описание |
арр |
Открытие для записи в конец файла. |
ate |
При открытии позиционирует указатель на конец файла. |
binary |
Файл открывается в двоичном (не текстовом) режиме. |
in |
Файл открывается для ввода. |
out |
Файл открывается для вывода. |
trunc |
Если файл существует, его содержимое теряется. |
Константы можно комбинировать с помощью поразрядного OR. Для конструкторов классов if stream и ofstream параметр mode имеет значения по умолчанию — соответственно ios : : in и ios : : out.
Закрытие файла
В классах файловых потоков имеется функция close (), которая сбрасывает содержимое потока и закрывает ассоциированный с ним файл.
Кроме того, деструктор потока автоматически закрывает файл при уничтожении объекта потока.
При ошибке закрытия файла устанавливается флаг failbit.
Примеры файловых потоков
Следующий пример (листинг 4) демонстрирует различные режимы и способы открытия потока.