试图让std :: ifstream再次打开

时间:2017-09-28 16:57:48

标签: c++ ifstream eof

我正在尝试对这种情况进行建模:我的程序刚刚读取了std :: ifstream的最后一行(例如,对于" data.txt"文本文件)并进行了一些操作可能需要很多时间,所以有人可能会在文本文件中添加额外的行。我的代码在这里

while (std::getline(fs, str)) // fs is of std::ifstream type, str is std::string
        {
            //main code

             ifs.clear();  // (1)
             ifs.setstate(std::ios_base::goodbit); // (2)
        }

我在while ...行上有一个断点,并在从那里读取最后一行后尝试向data.txt添加新行。我的第一次尝试失败了我尝试将(1),(2)或它们的组合添加到我的代码中以使eofbit = false,但再次失败。还有什么可以帮助?

1 个答案:

答案 0 :(得分:0)

您将其添加到错误的位置。在while的条件语句中遇到EOF,你无法阻止它,你也无法在循环中纠正它。

答案是将读取循环放在另一个循环中:

while (...)
{
  fs.clear();
  std::string str;
  while (getline(fs, str))
  {
    ...
  }
}

这是踢球者:你的程序会不断地通过EOF读取尝试发送文件,这对CPU不是很友好。你应该在你的while语句中加入一些条件来缓和它。

  • 只需睡一会儿(如四分之一秒)
  • 等待文件更新

两者都需要特定于操作系统的代码。后者是首选 Here’s a little library on GitHub that covers all the bases.