当istream :: seekg()到达文件末尾时会做什么?

时间:2017-05-25 23:59:38

标签: c++ fstream

我正在编写一个扫描文件的程序,这样做会调用seekg()。它在一个循环中旋转,其条件是!infile.eof();所以它应该在到达文件末尾时退出循环。然而,由于某种原因它会卡住。我怀疑这可能是因为它在seekg()中到达文件的末尾。换句话说,如果我距离文件末尾50个字节,我调用seekg()并告诉它将指针移动100个字节,这可能会使它卡住(在seekg()或之后)。那么,当被要求将指针移到文件末尾时,seekg()实际上会做什么?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

当您搜索文件末尾时,没有什么特别的事情发生。您只会注意到,当您下次尝试从文件中读取时,您已经过了结束。这允许其他一些进程在您查找和读取之间添加到文件中 - 在这种情况下,读取将成功。

在搜索结束后,如果您尝试从文件中读取它将失败,并设置流的eofbit。下次您在此之后致电infile.eof(),它将返回true

通常,在您尝试阅读之前,不能使用infile.eof()。这就是为什么循环:

while (!infile.eof()) {
    ...
}

总是错误的 - 它在尝试读取之前检查EOF ,而不是在读取失败之后。见http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong