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

标签 c++ file qt

我现在像这样逐行读取文件中的数据

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/

相关文章:

c++ - 如何使用 'auto' 关键字迭代 C++ STL 映射数据结构?

c++ - 如何使用OpenCV的归一化相关性?

windows - 我们如何使用 Win32 程序检查文件是否存在?

python - 如何使用二进制文件。覆盖特定字节

c++ - QSplitter 在 QWidget 和 QTabWidget 之间变得无法区分

c++ - Qt 调整父窗口小部件的大小

c++ - 关于C++模板的问题

java - 如何将文件复制到另一个位置供以后使用 (java)

c++ - 使用 cmake 和 QT 组织多个项目

c++ - Qt跨线程调用