我需要从一个大文件中读取最后一个64kb,但在找到文件的末尾然后返回64kb后,文件上的所有读取都会失败。
这是一个片段:
string filename = "test.txt";
ifstream::streampos pos; // used to keep track of position in file
ifstream fs;
fs.open(filename, ios::binary);
fs.seekg(0, ios::end);
pos = fs.tellg();
// ....
fs.seekg(-16, ios::cur);
char buff[16];
fs.read(buff, 16);
// ...
fs.close();
问题出在fs.read()
eofbit
,failbit
和badbit
已设置且文件流无法使用。值得注意的是,我正在阅读的文件被连续追加。此外,有时这种方法有效,有时它不会,这使调试变得困难。
为什么会发生这种情况有什么原因吗?
答案 0 :(得分:0)
您的问题是您在寻找文件结束后致电tellg
。 tellg
导致指针提前调用流上的eof状态:问题出在:
fs.open(filename, ios::binary);
fs.seekg(0, ios::end);
pos = fs.tellg(); // <== causes eof on stream
您对fs.seekg
的下一次调用应该清除eof状态,但最好是调用fs.clear()
并检查返回以确保其成功。