0

我正在 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,但 fail 位和 eof 位都可以。

我为此发疯了,需要一些帮助......

4

1 回答 1

3

试试这个:

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

你也应该istreambinary标志打开:

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

如果它永远读下去,它读的是什么?T是什么类型的?

于 2010-04-13T18:08:24.293 回答