在getline之后返回文件的开头

bq5*_*q54 37 c++

所以我已经从文件中读取了所有行

while (getline(ifile,line))
    {
        // logic
    }
Run Code Online (Sandbox Code Playgroud)

ifile是ifstream,line是一个字符串

我的问题是我现在想再次使用getline,并且似乎无法返回到文件的开头,因为正在运行

cout << getline(ifile,line);
Run Code Online (Sandbox Code Playgroud)

将返回0

我试图使用:

ifile.seekg (0, ios::beg);
Run Code Online (Sandbox Code Playgroud)

无济于事,似乎没有效果.如何返回文件的开头?

Kon*_*lph 70

由于您已到达文件末尾,因此eof将设置标志.您需要清除使用ifile.clear- 然后尝试寻求:

ifile.clear();
ifile.seekg(0, ios::beg);
Run Code Online (Sandbox Code Playgroud)

  • 正如旁注,在C++ 11中,seekg清除eofbit标志,如果在调用之前设置的话. (5认同)

Ang*_*ber 6

这是因为已经在流上设置了eof标志 - 因为您到达文件的末尾.所以你必须清除它作为一个额外的步骤.

例如

ifile.clear();
ifile.seekg (0, ios::beg);
Run Code Online (Sandbox Code Playgroud)