【发布时间】:2013-08-06 18:16:26
【问题描述】:
我目前像这样逐行从文件中读取数据
readFile(QFile *file)
{
QTextStream in(file);
while(!in.atEnd())
{
// Do stuff
}
}
我需要扩展它来处理当前正在写入的文件。 while 循环只有在 N 秒内没有任何内容写入文件时才应退出。
这应该很容易通过添加一个计时器和一个睡眠/等待循环来实现,不断检查我们是否仍然是atEnd()。但是,the documentation 不是很清楚,如果新数据已附加到文件中,atEnd() 的返回值是否会发生变化。
如果我使用QTextStream 读取正在写入的文件,atEnd() 的返回值会准确反映文件内容的变化吗?
【问题讨论】:
-
我认为更明智的做法是从内存中写入的缓冲区中读取。写入磁盘。
-
@ddriver - 我不确定我是否理解你的建议。我没有对磁盘进行任何写入。
-
我明白了,那么其他进程正在写入?您可以通过简单地打开文件并检查写入后其大小是否增加来测试文件大小是否正确反映。这完全取决于文件大小是在最初打开文件时检查(更可能是 IMO)还是按需检查。
-
最坏的情况,您可能需要在保留之前到达的位置的同时打开、读取、关闭、再次打开,以便从那里继续。
-
@CoryKlein Qt Creator 有 FS watching system,您可能会觉得有用。