我目前正在逐行读取文件中的数据
readFile(QFile *file)
{
QTextStream in(file);
while(!in.atEnd())
{
// Do stuff
}
}
我需要扩展它来处理当前正在写入的文件。只有在N秒内没有写入任何内容时,while
循环才会退出。
这应该通过添加计时器和睡眠/等待循环来连续检查我们是否仍然atEnd()
。但是,the documentation不清楚atEnd()
的返回值是否会在新数据附加到文件后发生变化。
如果我使用QTextStream
从正在写入的文件中读取,atEnd()
的返回值是否会准确反映文件内容的变化?
答案 0 :(得分:1)
atEnd()的返回值是否准确反映了文件内容的变化?
您可以通过执行以下功能对此进行测试:
void FileReader::_appendFileTest()
{
QFile file("/home/cklein/appendFile");
file.open(QIODevice::ReadOnly);
QTextStream in(&file);
while(true)
{
while(!in.atEnd())
{
QString line = in.readLine();
qDebug() << line;
}
SleepThread::msleep(1000);
}
}
来自here的SleepThread
代码。它只暴露受保护的QThread::msleep()
函数。
在应用程序运行时,在终端中输入
~ $ echo "foo" >> appendFile
~ $ echo "bar" >> appendFile
您可以看到,如果不重置或重新打开文件,atEnd()
函数会在附加文件时返回false
。