使用QTextStream读取正在写入的文件?

时间:2013-08-06 18:16:27

标签: c++ file qt

我目前正在逐行读取文件中的数据

readFile(QFile *file)
{
    QTextStream in(file);
    while(!in.atEnd())
    {
        // Do stuff
    }
}

我需要扩展它来处理当前正在写入的文件。只有在N秒内没有写入任何内容时,while循环才会退出。

这应该通过添加计时器和睡眠/等待循环来连续检查我们是否仍然atEnd()。但是,the documentation不清楚atEnd()的返回值是否会在新数据附加到文件后发生变化。

如果我使用QTextStream从正在写入的文件中读取,atEnd()的返回值是否会准确反映文件内容的变化?

1 个答案:

答案 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);
    }
}

来自hereSleepThread代码。它只暴露受保护的QThread::msleep()函数。

在应用程序运行时,在终端中输入

~ $ echo "foo" >> appendFile
~ $ echo "bar" >> appendFile

您可以看到,如果不重置或重新打开文件,atEnd()函数会在附加文件时返回false