Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ istream::seekg()到达文件末尾时做什么?_C++_Fstream - Fatal编程技术网

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

C++ istream::seekg()到达文件末尾时做什么?,c++,fstream,C++,Fstream,我正在编写一个扫描文件的程序,这样做会大量调用seekg()。它在一个循环中旋转,其条件是!infle.eof();因此,它应该在到达文件末尾时退出循环。然而,由于某种原因,它被卡住了。我怀疑这可能是因为它在seekg()中到达文件末尾。换句话说,如果我距离文件末尾有50个字节,我调用seekg()并告诉它将指针移动100个字节,可能会使它卡住(在seekg()中或之后)。那么,当要求seekg()将指针移过文件末尾时,它实际上做了什么 提前感谢您。当您搜索超过文件末尾时,不会发生任何特殊情况。

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


提前感谢您。

当您搜索超过文件末尾时,不会发生任何特殊情况。当您下次尝试读取文件时,您只会注意到已经过了结尾。这允许在查找和读取之间向文件添加其他进程,在这种情况下,读取将成功

搜索结束后,如果尝试从文件读取,将失败,并设置流的eofbit。下次调用
infle.eof()
之后,它将返回
true

通常,在尝试阅读某个内容之前,不能使用
infle.eof()
。这就是为什么循环像:

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

总是错误的——它在尝试读取之前检查EOF,而不是在读取失败之后。请参见

您确定您对eof的期望和使用是正确的吗?您确定其余的代码和逻辑正确吗?这就是为什么这类问题需要包含a。。我建议您访问并查看该部分。您只能在尝试阅读某些内容后使用
infle.eof()
。它告诉您上次读取是否失败,因为您在文件末尾。请参阅我的代码中有许多变量。如果我把它包括在内,我必须解释他们都做了什么。我只是问seekg()是否与此有关。无论如何,MCVE的优点在于您不必提供所有代码。您必须提供一个专门构造的测试用例,以最少的混乱和混乱来演示问题。作为一个额外的好处,创建一个MCVE几乎总是会暴露错误,并避免您首先提出问题。