Язык программирования C++. Вводный курс


Файловый ввод/вывод - часть 4


fstream io( "word.out", ios_base::in|ios_base::app );

Для задания нескольких режимов используется оператор побитового ИЛИ. Объект класса fstream

можно позиционировать с помощью функций-членов seekg() или seekp(). Здесь буква g

обозначает позиционирование для чтения

(getting) символов (используется с объектом класса ofstream), а p – для записи (putting) символов (используется с объектом класса ifstream). Эти функции делают текущим тот байт в файле, который имеет указанное абсолютное или относительное смещение. У них есть два варианта:

// установить абсолютное смещение в файле

seekg( pos_type current_position )

 

// смещение от текущей позиции в том или ином направлении

seekg( off_type offset_position, ios_base::seekdir dir );

В первом варианте текущая позиция устанавливается в некоторое абсолютное значение, заданное аргументом current_position, причем значение 0

соответствует началу файла. Например, если файл содержит такую последовательность символов:

abc def ghi jkl

 

то вызов

io.seekg( 6 );

позиционирует io на шестой символ, т.е. на f. Второй вариант устанавливает указатель рабочей позиции файла на заданное расстояние от текущей, от начала файла или от его конца в зависимости от аргумента dir, который может принимать следующие значения:

·                  ios_base::beg – от начала файла;

·                  ios_base::cur – от текущей позиции;

·                  ios_base::end – от конца файла.

В следующем примере каждый вызов seekg()

позиционирует файл на i-ую запись:

for ( int i = 0; i < recordCnt; ++i )

      readFile.ssekg( i * sizeof(Record), ios_base::beg );

С помощью первого аргумента можно задавать отрицательное значение. Переместимся на 10 байтов назад от текущей позиции:




Начало  Назад  Вперед