Как прочитанный файл (с использованием Fstream) повторно открыть снача

Тема в разделе "Общие вопросы по С и С++", создана пользователем strannnik13, 11 дек 2007.

Статус темы:
Закрыта.
  1. strannnik13

    strannnik13 Гость

    Т.е. как установить позицию ввода-вывода на начало в потоке fstream? Думал надо повторно открыть, т.е. например
    Код (Text):
    fstream file;
    file.open("file.txt",ios::in);
    //считываем файл до конца...
    file.close();
    file.open("file.txt",ios::in);
    ан нет, в таком случае все равно маркер ввода будет в конце файла. B)
     
  2. SaleX

    SaleX Гость

    Позиционирование потока.

    istream& istream::seekg(long pos);

    - устанавливает позицию чтения из потока в положение, определяемое значением параметра.
    istream& istream::seekg(long off, ios::seek_dir dir);

    - выполняет перемещение позиции чтения вдоль потока в направлении, опеределенном параметром dir, который принимает значение из перечисления enum seek_dir {beg, cur, end};. Относительная величина перемещения ( в байтах) определяется значением параметра long off. Если направление определено как beg, то смещение от начала потока; cur - от текущей позиции; end - от конца потока.
    ostream& ostream::seekp(long pos);

    - устанавливает абсолютную позицию записи в поток.
    ostream& ostream::seekp(long off, ios::seek_dir dir);

    - аналогична функции seekg(), но принадлежит классу ostream и выполняет относительное перемещение записи в поток.
    Определение текущей позиции потока.

    long istream::tellg();

    - определяет текущую позицию чтения из потока.
    long ostream::tellp();

    - определяет текущую позицию записи в поток
     
  3. gamecreator

    gamecreator Гость

    у тебя значит какой-то дефективный компилятор. маркер в начале будет. а зачем тебе маркер ввода? если хочешь перезаписать файл, создай заново.
     
  4. Mitov

    Mitov Гость

    Уважаемые, у меня тот же "баг", так что компилятор ни при чем. Дело вот в чем: seekg(long off, ios::seek_dir dir) позицию-то меняет (можно убедится по tellg()) но не сбрасывает флаг eof(). Так что прийдется добавить еще строчку fstream::clear() - сброс состояния всех флагов.

    ifstream myfile("file.txt", ios::in);
    /*
    что-то делаем
    */
    myfile.seekg(0,ios::beg);
    myfile.clear();
    /*
    работаем дальше
    */

    в ряде случаев, сперва нужно очистить флаги myfile.clear(); а потом устанавливать позицию myfile.seekg(0,ios::beg); (компиляторы?)

    вот линк, на английском http://www.cplusplus.com/reference/iostream/ifstream/
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей