Двоичный ввод\вывод

Имеется несколько способов для записи двоичных данных в файл и чтения из файла. В первую очередь, можно записать байт с помощью функции-члена put() и прочитать байт, используя функцию-член get(). Функция get() имеет много форм, но наиболее употребительна показанная ниже версия, где приведена также функция put(): istream &get(char &ch); ostream &put(charch); Функция get() читает единственный символ из ассоциированного потока и помещает его значение в ch. Она возвращает ссылку на поток. Функция put() пишет ch в поток и возвращает ссылку на этот поток.

Второй способ чтения и записи двоичных данных состоит в использовании функций read() и write(). Наиболее обычный способ использования этих функций соответствует прототипу:

istream &read(unsignedchar *buf, intnum); ostream &write(constunsignedchar *buf, intnum);

Функция read() читает num байт из ассоциированного потока и посылает их в буфер buf. Функция write() пишет num байт в ассоциированный поток из буфера buf.

Следует обратить внимание, что приведение типов в вызовах read() и write() необходимо для работы с буфером, который не определён как массив символов.

Если конец файла достигается до того, как будет прочитано заданное число символов, функция read() просто прекращает работу и буфер содержит столько символов, сколько было прочитано. Можно определить, сколько символов было прочитано, используя другую функцию-член gcount(), имеющую следующий прототип:intgcount(); Она возвращает число символов, прочитанных последним оператором двоичного ввода.

Произвольный доступ

Система ввода-вывода С++ позволяет осуществлять произвольный доступ с использованием функции seekg() и seekp(). Их наиболее употребительной формой является следующая: istream &seekg(streamoffoffset, seek_dirorigin); ostream &seekp(streamoffoffset, seek_dirorigin);

Здесь тип streamoff определен в заголовочном файле iostream. Он определяет область значений, которые может принимать величина offset. В настоящее время streamoff определён как long.

Система ввода-вывода С++ обрабатывает два указателя, ассоциированные с каждым файлом. Один из них, getpointer, определяет, где именно в файле будет производиться следующая операция ввода. Другой указатель putpointer указывает, где именно в файле будет производиться следующая операция вывода. Всякий раз, когда осуществляются операции ввода или вывода, соответствующий указатель автоматически перемещается.

Функция seekg() перемещает указатель getpointer на offset байт от заданного origin, принимающего одно из следующих трех значений: ios::beg  Начало файла, ios::cur — Текущее положение, ios::end — Конец файла. Функция seekp() перемещает указатель putpointer на offset байт от заданного origin, в качестве которого служит одно из указанных выше значений. Можно определить текущую позицию файлового указателя, используя следующие функции: streampostellg(); streampostellp(); Здесь тип streampos определён в заголовочном файле iostream. В текущей версии он определён как long.


Ссылка на основную публикацию
Adblock detector