fstream htmlFile;
htmlFile.open((char*)tmpFile, ios::in);
if (!htmlFile.is_open())
continue;
while (!htmlFile.eof())
htmlFile.getline(buffer, sizeof(buffer));
есть html файл, типа fstream, мы из него читаем все строчки. но вышеприведённый код приводит к бесконечному циклу, т.е. eof() всегда отрицательное значение, хотя файл уже давно кончился и в buffer лезут одни пустые строчки. отчего это может быть, как бороть?
> > while (!htmlFile.eof())
> htmlFile.getline(buffer, sizeof(buffer));
>
>
> есть html файл, типа fstream, мы из него читаем все строчки. но вышеприведённый код приводит к бесконечному циклу, т.е. eof() всегда отрицательное значение, хотя файл уже давно кончился и в buffer лезут одни пустые строчки. отчего это может быть, как бороть?
Попробуй так:
while (htmlFile)
htmlFile.getline(buffer, sizeof(buffer));
Вообще, организовывать цикл по !htmlFile.eof() опасно: если происходит ошибка чтения, eofbit никогда не будет взведен, т.к. после взведения failbit поток перестает что-либо читать.
Posted via RSDN NNTP Server 1.9 alpha
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Попробуй так:
ПК>ПК>while (htmlFile)
ПК> htmlFile.getline(buffer, sizeof(buffer));
ПК>
ПК>Вообще, организовывать цикл по !htmlFile.eof() опасно: если происходит ошибка чтения, eofbit никогда не будет взведен, т.к. после взведения failbit поток перестает что-либо читать.
if (htmlFile)
неработает, я сделал
if (htmlFile.good())
Здравствуйте, race1, Вы писали:
R>R>fstream htmlFile;
R>htmlFile.open((char*)tmpFile, ios::in);
R>if (!htmlFile.is_open())
R> continue;
R>while (!htmlFile.eof())
R> htmlFile.getline(buffer, sizeof(buffer));
R>
R>есть html файл, типа fstream, мы из него читаем все строчки. но вышеприведённый код приводит к бесконечному циклу, т.е. eof() всегда отрицательное значение, хотя файл уже давно кончился и в buffer лезут одни пустые строчки. отчего это может быть, как бороть?
Вообще-то getline возвращает istream&. Так что напрашивается
while( !(htmlFile.getline(buffer, sizeof(buffer)).rdstate()&std::ios::failbit) );