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

  • Автор темы strannnik13
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

strannnik13

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

SaleX

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

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();

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

gamecreator

#3
ан нет, в таком случае все равно маркер ввода будет в конце файла. <_<
у тебя значит какой-то дефективный компилятор. маркер в начале будет. а зачем тебе маркер ввода? если хочешь перезаписать файл, создай заново.
 
M

Mitov

#4
Уважаемые, у меня тот же "баг", так что компилятор ни при чем. Дело вот в чем: 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/
 
Статус
Закрыто для дальнейших ответов.