C ++ iostream не устанавливает бит, даже если gcount возвращает 0 - PullRequest
0 голосов
/ 13 апреля 2010

Я разрабатываю приложение под Windows и использую fstreams для чтения и записи в файл.

Я пишу с открытым fstream так:

fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);

и писать с помощью этой команды

fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));

закрытие файла после каждой записи с помощью

fs.close()

Чтение с открытым потоком так:

is.open(filename, std::ios::in);

и чтение с помощью этой команды:

is.read(reinterpret_cast<char*>(&e.element), sizeof(T));

Запись идет нормально. Тем не менее, я читал в цикле так:

while(!is.eof())
{
  is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}

и программа продолжает чтение, даже если конец файла должен быть достигнут. istellg pos равно 0, а gcount тоже равно 0, но бит сбоя и бит eof оба в порядке.

Я схожу с ума по этому поводу, нужна помощь ...

1 Ответ

3 голосов
/ 13 апреля 2010

Попробуйте это:

while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}

Также вы должны открыть istream с флагом binary:

is.open(filename, std::ios::in | std:ios::binary);

Если он читает вечно, что он читает? Какой тип Т?

...