fstream
От: race1 Россия  
Дата: 31.05.04 07:37
Оценка:
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 лезут одни пустые строчки. отчего это может быть, как бороть?
Re: fstream
От: Павел Кузнецов  
Дата: 31.05.04 07:48
Оценка: 1 (1)
>
> 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
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: fstream
От: race1 Россия  
Дата: 31.05.04 09:50
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Попробуй так:

ПК>
ПК>while (htmlFile)
ПК>    htmlFile.getline(buffer, sizeof(buffer));
ПК>

ПК>Вообще, организовывать цикл по !htmlFile.eof() опасно: если происходит ошибка чтения, eofbit никогда не будет взведен, т.к. после взведения failbit поток перестает что-либо читать.

if (htmlFile)
неработает, я сделал
if (htmlFile.good())
Re: fstream
От: grs Россия  
Дата: 31.05.04 12:37
Оценка:
Здравствуйте, 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) );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.