Хелпикс

Главная

Контакты

Случайная статья





Режимы открытия файла. Закрытие файла. Двоичный режим ввода-вывода



2.3.1 Режимы открытия файла

Параметр mode, который имеет вторая форма конструктора, задает режим открытия файла. Для значений параметра класс ios определяет символические константы, перечисленные в таблице 11.3.

Таблица 11.3. Константы класса ios для режимов открытия файла

Константа Описание
арр Открытие для записи в конец файла.
ate При открытии позиционирует указатель на конец файла.
binary Файл открывается в двоичном (не текстовом) режиме.
in Файл открывается для ввода.
out Файл открывается для вывода.
trunc Если файл существует, его содержимое теряется.

Константы можно комбинировать с помощью поразрядного OR. Для конструкторов классов ifstream и ofstream параметр mode имеет значения по умолчанию – соответственно ios::in и ios::out.

2.3.2 Закрытие файла

В классах файловых потоков имеется функция close(), которая сбрасывает содержимое потока и закрывает ассоциированный с ним файл.

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

При ошибке закрытия файла устанавливается флаг failbit.

2.3.3 Двоичный режим ввода-вывода

Операций извлечения/передачи данных перегружены для всех встроенных типов и выполняют соответствующие преобразования из внутреннего представления данных в текстовое и из текстового во внутреннее (машинное). Однако в библиотеке C++ имеется немало функций бесформатного ввода-вывода, которые часто применяют для чтения и записи двоичных (не-текстовых) файлов.

Двоичный режим открытия файла (с установленным битом binary) означает, что никакой трансляции данных при передаче из файла в поток и обратно производиться не будет. Речь здесь идет не о форматных преобразованиях представления данных. При текстовом режиме (он принимается по умолчанию) при передаче данных между файлом и потоком производится замена пар символов CR/LF на единственный символ LF ('\n') и наоборот. Это происходит до преобразований представления, которые выполняются операциями извлечения/передачи. Двоичный ввод-вывод означает всего-навсего, что такой замены происходить не будет; тем не менее двоичный режим необходим при работе с сырыми данными, т. е. данными в машинной форме без преобразования их в текстовый формат.

Чтобы открыть файл в двоичном режиме, нужно, установить в параметре mode конструктора потока или функции open() бит ios::binary.

Чтение сырых данных производится функцией read() класса istream:

istream &read(char *buf, long len);

Здесь buf – адрес буфера, в который будут читаться данные, а len – число символов, которые нужно прочитать.

Запись сырых данных производится функцией write() класса ostream. Она выглядит точно так же, как функция read():

ostream &write(char *buf, long len);

Здесь buf – адрес буфера, в котором содержатся данные, а len – число символов, которые должны быть записаны в поток.

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

ostream os(...);

os.write(...).write(...).write(...);



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.