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


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


readFile.seekg( -10, ios_base::cur );

Текущая позиция чтения в файле типа fstream

возвращается любой из двух функций-членов tellg() или tellp(). Здесь 'p'

означает запись (putting) и используется с объектом ofstream, а 'g'

говорит о чтении (getting) и обслуживает объект ifstream:

// сохранить текущую позицию

ios_base::pos_type mark = writeFile.tellp();

 

// ...

if ( cancelEntry )

   // вернуться к сохраненной позиции

   writeFile.seekp( mark );

Если необходимо сместиться вперед от текущей позиции на одну запись типа Record, то можно воспользоваться любой из данных инструкций:

// эквивалентные вызовы seekg

readFile.seekg( readFile.tellg() + sizeof(Record) );

 

// данный вызов считается более эффективным

readFile.seekg( sizeof(Record), ios_base::cur );

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

 

abcd

efg

hi

j

 

Программа должна создать файл, модифицированный следующим образом:

 

abcd

efg

hi

j

5 9 12 14 24

 

Так выглядит первая попытка реализации:

#include <iostream>

#include <fstream>

 

main() {

    // открыть файл для ввода и дозаписи

    fstream inOut( "copy.out", ios_base::in|ios_base::app );

    int cnt = 0;   // счетчик байтов

    char ch;

 

    while ( inOut.get( ch ))

    {

        cout.put( ch ); // скопировать на терминал

        ++cnt;

        if ( ch == '\n' ) {

            inOut << cnt ;

            inOut.put( ' ' ); // пробел

        }

    }

 

    // вывести окончательное значение счетчика байтов

    inOut << cnt << endl;

    cout << "[ " << cnt << " ]" << endl;

    return 0;

}

inOut – это объект класса fstream, связанный с файлом copy.out, открытым для ввода и дозаписи. Если файл открыт в режиме дозаписи, то все новые данные записываются в конец.




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



Книжный магазин