Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Функция getline()


Автор: WWWind 22.11.2002, 08:39
Читаю данные из файла с помощью функции getline();
std::string buffer;
std::getline(infile,buffer,'\n');

Сперва, конечно, позиционирую на начало файла
std::string::size_type pos=0;
infile.seekg(pos,std::ios::beg);

Когда дохожу до конца файла и снова ставлю на первую позицию, то не могу ничего прочитать из файла. Делаю getline(...), а buffer пуст.    :(

В чем может быть проблема?

заранее спасибо)

Автор: Alamo 29.11.2002, 16:39
было что то похожее давно, а выкручивался тогда просто - заново открывал файл на чтение, правда в файл ничего не писал, так что это было не критично

Автор: Step 30.11.2002, 03:41
Попробуй прочитать дважды после позиционирования, бываю такие глюки, на второй раз буфер должен быть заполненный.

Автор: DrMasik 19.12.2002, 07:36
Это не глюк! Все правильно! Ты попробуй прочитать первые 3 символа, а потом 1-й - может дальше сам догадаешся...

Автор: Step 19.12.2002, 18:30
Цитата(DrMasik @ 18.12.2002, 23:36)
Это не глюк! Все правильно! Ты попробуй прочитать первые 3 символа, а потом 1-й - может дальше сам догадаешся...

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

Автор: DrMasik 21.12.2002, 08:13
Какого типа у тя
infile
?

Автор: comcon1 24.7.2005, 10:59
Я поднял эту тему из архива, поскольку на вопрос так и не ответили. Я столкнулся с абсолютно тем же. Файл был мною открыт как std::ifstream, что наверное и имел ввиду DrMasik. После этого начали проходить позиционирования (функция tellg() стала возвращать не -1). Но getline() с новой позиции все равно не проходит. Посмотрите еще раз тему и добейте плз..
Добавлено @ 11:03
Точнее я добью ее сам: после позиционирования infile.seekg() необходимо очистить флаги. infile.clear().
Тогда getline() проходит.
Значит еще раз:
1. Определить infile как std::ifstream..
2. Очистить флаги после позиционирования..
[теперь все, вроде]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)