【问题标题】:fstream reading error (only reading first line)fstream 读取错误(仅读取第一行)
【发布时间】:2019-05-06 15:18:36
【问题描述】:

我想用 std::getline 读取文件。但只读取第一行

string FileReader::readLine() {

    string line;
    string read;
    ifstream ReadFile;
    ReadFile.open("input.txt");

    if (ReadFile.is_open()) {
        getline(ReadFile, line);

      //ReadFile.close();
    }
    return line;
}

这是我的方法。我多次调用此方法,但总是读取第一行我该怎么做才能读取下一行?

【问题讨论】:

  • 也许使用循环
  • 您想将整个文件保存到一个字符串中吗?或者您是否想将每一行存储在一个容器中,如数组或向量?现在getline() 正在阅读第一行,然后你就完成了。
  • 不,我不想把整个文件变成字符串。我想逐行保存。我多次调用方法但无法读取其他行
  • 每次调用都会重新打开一个文件,因此您总是从头开始阅读。您需要打开文件一次,然后多次调用getline,然后在阅读完毕后将其关闭。
  • 你要的是协程。看看 C++ 20。

标签: c++ fstream ifstream


【解决方案1】:

您需要更改程序流程。

不返回字符串。使用循环中的行来做任何你想做的事情。确保您要么不离开该方法,要么返回它。

你不能一直回到这样的函数,因为它会从头开始读取。

void FileReader::readLine() {

    string line;
    string read;
    ifstream ReadFile;
    ReadFile.open("input.txt");

    if (ReadFile.is_open()) {
        while(getline(ReadFile, line))
        {
            //do what you want with that line, but return program flow here.
        }
        ReadFile.close();
    }
}

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多