即使gcount返回0,C ++ iostream也没有设置eof位

时间:2010-04-13 17:59:29

标签: c++ fstream ifstream ofstream

我正在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()

使用ifstream打开阅读:

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 个答案:

答案 0 :(得分:3)

试试这个:

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

此外,您还应该使用istream标记打开binary

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

如果它永远读取,它会读到什么?什么类型的T?