【发布时间】:2015-12-17 12:34:39
【问题描述】:
我正在尝试编写一个程序,它会持续监控日志文件并将特定项目输出到新文件中。
我基本上在使用。
for (int i = 1; i < y; i ++)
getline(read, line); // skips to the last known end
while (getline(read, line))
{
cout << line;
}
read.clear();
我还跟踪我在变量上使用增量运算符的行。在文件的末尾,我清除了 eof 位并查找到我所在的最后一行。从使用调试器来看,它似乎可以工作。我在文件中检索到正在写入的下一行,但是当我回调我的 while (getline(read,line)); 时,它会跳过 while 循环,这是为什么呢?
- 程序读取文件的最后一行。
- 睡 5 分钟。
- 输入文件已从第三方添加了新行。
- 在睡眠后唤醒并返回到 while 循环。
- 它成功地从输入中检索到新行。但未能 再次进入while循环
【问题讨论】:
-
seekg(y)查找字节偏移量y,而不是行号y。你需要使用tellg()并记住你想要的行的字节偏移量,以便稍后返回。 -
@IgorTandetnik 哦,我错了。我使用 for 循环跳过 getline 到最后。我已经更新了帖子。我一直在使用 seekg。
-
某处是否有倒带(寻找开始)?没有代码,你的代码毫无意义。
-
使用
open()和read()或pread()从另一个进程主动写入的文件中读取可能会获得更好的结果。这实际上不是一个容易解决的问题,并且在代码和文件之间放置抽象层和缓冲层(例如使用 C++istream)不太可能很好地工作。正如你所发现的那样。 -
@IgorTandetnik 我相信因为我从不关闭输入流,它保留它所在的当前行,它只在程序结束并重新启动时进行迭代,它所在的行也被存储在文件中,并在启动时收到。