我现在像这样逐行读取文件中的数据
readFile(QFile *file)
{
QTextStream in(file);
while(!in.atEnd())
{
// Do stuff
}
}
我需要扩展它来处理当前正在写入的文件。 while
循环只有在 N 秒内没有任何内容写入文件时才会退出。
这应该很容易实现,只需添加一个计时器和一个 sleep /等待循环,持续检查我们是否仍在 atEnd()
。然而,the documentation如果新数据已附加到文件,atEnd()
的返回值是否会更改不是很清楚。
如果我使用 QTextStream
读取正在写入的文件,atEnd()
的返回值是否会准确反射(reflect)文件内容的变化?
最佳答案
will the return value of atEnd() accurately reflect the change in file contents?
是
您可以通过执行以下函数来测试它:
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);
}
}
SleepThread
的代码取自 here .它只是公开 protected QThread::msleep()
函数。
在应用程序运行时,在终端中输入
~ $ echo "foo" >> appendFile
~ $ echo "bar" >> appendFile
您可以看到,在不重置或重新打开文件的情况下,atEnd()
函数在附加文件时返回 false
。
关于c++ - 使用 QTextStream 读取正在写入的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18087541/