我正在尝试对这种情况进行建模:我的程序刚刚读取了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,但再次失败。还有什么可以帮助?
答案 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.