Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Электронный конспект лекций (семестр 2).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
251.39 Кб
Скачать

2.4.5.3.Методы read и write

Для ввода-вывода нескольких байтов данных определены также методы read и write:

istream& read (char* buf, int nCount);

ostream& write (const char* buf, int nCount);

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

2.4.6.Особенности работы с бинарными файлами

Бинарные файлы, в отличие от текстовых, могут хранить числовые данные в их внутреннем, числовом формате. Для ввода данных из бинарного файла может использоваться метод read, для вывода в бинарный файл – метод write.

Если вводимые или выводимые данные не являются символами или строками, например, это числа, структуры или объекты, необходимо выполнять преобразование адресов данных, передаваемых методам read и write, к типу char*. В этом случае данные, начиная с указанного адреса, будут рассматриваться как коды символов и произойдет их побайтовый ввод (вывод) без какого-либо промежуточного преобразования. В качестве числа вводимых (выводимых) байтов следует указывать размер переменной соответствующего типа (например, 2 – для переменных типа short, 4 – для переменных типа long, размер, вычисленный с помощью операции sizeof, – для массивов, структур и объектов).

Для бинарного вывода файл должен быть открыт с режимом ios::binary, поскольку в противном случае каждый байт потока со значением 10 (шестнадцатеричным 0A) в файле будет заменен парой байтов со значениями 13 и 10 (шестнадцатеричными 0D и 0A).

2.4.7.Использование текущей позиции файла

Для изменения текущей позиции во входном файле, используется ме­тод seekg. Его основная форма имеет два параметра. Первый из них – целое число, задающее смещение позиции в байтах, вто­рой параметр определяет точку отсчета смещения, он может принимать одно из трех значений:

ios::beg – начало файла;

ios::cur – текущая позиция;

ios::end – конец файла.

Есть еще один вариант seekg – с одним параметром, задающим смещение позиции. Он подразумевает смещение от начала файла.

Для перемещения текущей позиции в выходном файле, используется ме­тод seekp, также с двумя или одним параметром. Смысл его параметров тот же, что и у параметров метода seekg.

После перемещения текущей позиции операции ввода-вывода продолжаются с нового места в файле.

Текущую позицию данных можно определить при помощи метода tellg при вводе и tellp – при выводе. Эти методы не имеют параметров и возвращают текущую позицию связанного с потоком файла. Использование этих методов позволяет сохранить текущее значение позиции файла, выполнить некоторые операции ввода-вывода, а затем восстановить прежнее значение:

long p = io.tellg();

...

io.seekg (p);

Следует отметить, что некоторые операции объектно-ориентированного ввода-вывода файлов имеют специфику, зависящую от конкрет­ной операционной системы и компилятора, поэтому за деталями реализации полезно обращаться к технической документации (например, к справочной системе) используемой среды разработки программ.