Привет!
Такая проблема: при чтении текстового файла (лог Squid'a) при помощи потоков С++ поток встает колом, а конкретно - не перемещается указатель текущей позиции. Вот сам код:
#include <iostream.h>
#include <fstream.h>
int main ()
{
ifstream f ("some_file");
if (!f)
{
cerr << "Ошибка открытия файла!!!" << endl;
exit(1);
}
char str[2048];
while (f.getline(str, 2048))
{
//обработка строки str
}
f.seekg(0, ios::end);
cout << "Текущая позиция в файле : " << f.tellg() << endl;
}
Так вот, если убрать строку f.seekg(0, ios::end);, то tellg() возвращает -1. Если строку оставить, то происходит то же самое. Попытка вставить в условие выхода из цикла !f.eof(), а само чтение строки перенести в тело цикла не принесло успеха.
Что самое удивительное, этот код работает с небольшими файлами в несколько килобайт, но при попытке работать с файлами размером в несколько мегабайт возникают вышеописанные ошибки. Пробовал эту прогу на Borland c++ 3.1 (старенький досовский компилятор) - работает нормально! C++ Builder 6 - ошибка.
Я компилирую gcc 3.2 (ОС Mandrake Linux 9.0).
Было уже17.12.02 14:07 Автор: amirul <Serge> Статус: The Elderman
Когда поток переходит в состояние, отличное от good (пишу по памяти, но кажется это eof, bad и fail), то любые операции с ним ошибочны. Для продолжения работы нужно сбросить состояние потока: f.clear();
При этом позиционироваться в конец не нужно - указатель и так там.
Было уже18.12.02 03:14 Автор: alien <Андрей> Статус: Member
А перед seekg следует сделать clear().
И если уж быть совсем точным, то переходит не в состояние ошибки, а в состояние конец_файла (включается не badbit, а eofbit)
[C++] Проблема с потоками в C++17.12.02 09:59 Автор: BioHazard <bio> Статус: Elderman
> Такая проблема: при чтении текстового файла (лог Squid'a) > при помощи потоков С++ поток встает колом, а конкретно - не > перемещается указатель текущей позиции. Вот сам код: