istream::seekg() 到达文件末尾时会做什么?
What does istream::seekg() do when it gets to the end of the file?
我正在编写一个扫描文件的程序,并在执行此操作时多次调用 seekg()。它在一个循环中旋转,其条件是 !infile.eof();所以它应该在到达文件末尾时退出循环。但是,由于某种原因,它卡住了。
我怀疑这可能是因为它在 seekg() 中到达文件末尾。换句话说,如果我距离文件末尾 50 个字节,我调用 seekg() 并告诉它移动指针 100 个字节,也许这会导致它卡住(在 seekg() 中或之后)。
那么,当要求将指针移到文件末尾时,seekg() 实际上做了什么?
当您搜索到文件末尾时,不会发生任何特殊情况。当您下次尝试从文件中读取时,您只会注意到您已经过了结尾。这允许一些其他进程在您查找和读取之间添加到文件中——在这种情况下,读取将成功。
搜索结束后,如果尝试从文件中读取将会失败,并设置流的eofbit。之后你下次调用 infile.eof()
时,它将 return true
.
一般来说,只有在尝试阅读某些内容后才能使用 infile.eof()
。这就是为什么循环像:
while (!infile.eof()) {
...
}
总是错误的——它在 尝试读取之前而不是在读取失败之后检查 EOF 。参见
我正在编写一个扫描文件的程序,并在执行此操作时多次调用 seekg()。它在一个循环中旋转,其条件是 !infile.eof();所以它应该在到达文件末尾时退出循环。但是,由于某种原因,它卡住了。
我怀疑这可能是因为它在 seekg() 中到达文件末尾。换句话说,如果我距离文件末尾 50 个字节,我调用 seekg() 并告诉它移动指针 100 个字节,也许这会导致它卡住(在 seekg() 中或之后)。
那么,当要求将指针移到文件末尾时,seekg() 实际上做了什么?
当您搜索到文件末尾时,不会发生任何特殊情况。当您下次尝试从文件中读取时,您只会注意到您已经过了结尾。这允许一些其他进程在您查找和读取之间添加到文件中——在这种情况下,读取将成功。
搜索结束后,如果尝试从文件中读取将会失败,并设置流的eofbit。之后你下次调用 infile.eof()
时,它将 return true
.
一般来说,只有在尝试阅读某些内容后才能使用 infile.eof()
。这就是为什么循环像:
while (!infile.eof()) {
...
}
总是错误的——它在 尝试读取之前而不是在读取失败之后检查 EOF 。参见