我正在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位都没问题。
我为此疯狂,需要一些帮助...
答案 0 :(得分:3)
试试这个:
while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}
此外,您还应该使用istream
标记打开binary
:
is.open(filename, std::ios::in | std:ios::binary);
如果它永远读取,它会读到什么?什么类型的T?