ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн

Биты режимов

Мы уже встречали бит режима ios::binary. При написании функции open() исполь-

зовали еще несколько. Теперь сведем их все вместе в табл. 12.10. Биты режимов,

определенные в ios, определяют различные методы открытия потоковых объектов.

Таблица 12.10. Биты режимов

Бит режима      Результат

in            Открытие для чтения (по умолчанию для ifstream)

out         Открытие для записи (по умолчанию для ofstream)

ate         Чтение, начиная с конца файла (AT End)

app        Запись, начиная с конца файла (AAPend)

trunc     Обрезать файл до нулевой длины, если он уже существует (TRUNCate)

nocreate             Не открывать несуществующий файл

noreplace           Не открывать для вывода существующий файл, если не установлены  ate или app

binary   Открыть в бинарном (не текстовом) режиме

В DISKFUN использовался бит ios::app, потому что нам требовалось сохра-

нить все, что было записано в файл до этого. То есть можно записать что-нибудь

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

данные, сохранив при этом результаты предыдущей сессии. ios::in и ios::out мы

используем потому, что хотим осуществлять одновременно и ввод, и вывод.

ios::binary также необходим, потому что мы записываем бинарные объекты.

Вертикальные палочки между флагами нужны для того, чтобы из битов сфор-

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

одновременно.

 

За один раз в файл записывается один объект person с помощью функции

write(). После окончания записи мы хотим прочитать файл целиком. Для этого

нужно вначале установить указатель файла на начало. Этим занимается функ-

ция seekg(), к которой мы обратимся в следующем параграфе. После этого мы

уже уверены, что чтение начнется с начала файла. Затем в цикле while мы счи-

тываем объект из файла и выводим его на экран.

Это продолжается до тех пор, пока не будут прочитаны все объекты класса

person, — состояние, определяемое флагом ios::eofbit.

 

28