EOF не устанавливается при достижении конца
От: morden Украина http://www.morden.com.ua/
Дата: 12.10.05 11:33
Оценка:
Добрый день!

У меня есть следующий код, для чтения файла:

#include <fstream>

using namespace std;
#define DWORD unsigned long

int main()
{
    unsigned char    rch;
    fstream        fBin;
    fBin.open("binfile.txt", ios_base::in | ios_base::binary);
    while (!fBin.eof())
        fBin.read((char*)&rch, 1);    //здесь происходит вторая операция чтения однобайтового
                                              //файла, в результате которой rch == предидущему значению rch
}
Файл состоит из 1-го символа? Почему fBin.eof() == true только после того как совершил две операции чтения по одному символу? Насколько я понимаю, флаг EOF должен устанавливатся сразу после прочтения последнего символа файла, а не чтении файла размером + 1 символ.
Re: EOF не устанавливается при достижении конца
От: GregZ СССР  
Дата: 12.10.05 11:37
Оценка: 2 (1)
Здравствуйте, morden, Вы писали:

После чтения последнего символа флаг eofbit не устанавливается, он устанавливается вместе с флагом failbit при следующий попытке чтения символа.
Re: EOF не устанавливается при достижении конца
От: srggal Украина  
Дата: 12.10.05 11:46
Оценка: 2 (1)
Здравствуйте, morden, Вы писали:

Можно код чуть плдправить:
M>
M>#include <fstream>

M>using namespace std;
M>#define DWORD unsigned long

M>int main()
M>{
M>    unsigned char    rch;
M>    fstream        fBin;
M>    fBin.open("binfile.txt", ios_base::in | ios_base::binary);

M>    while ( fBin.read((char*)&rch, 1) )
{
...
}

M>
M>                                              //файла, в результате которой rch == предидущему значению rch
M>}
M>
Файл состоит из 1-го символа? Почему fBin.eof() == true только после того как совершил две операции чтения по одному символу? Насколько я понимаю, флаг EOF должен устанавливатся сразу после прочтения последнего символа файла, а не чтении файла размером + 1 символ.
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.