簡體   English   中英

使用QTextStream讀取正在寫入的文件?

[英]Using QTextStream to read a file that is being written to?

我目前正在逐行讀取文件中的數據,就像這樣

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

我需要擴展它以處理當前正在寫入的文件。 僅當N秒鍾內未將任何內容寫入文件時, while循環才應退出。

這可以通過添加計時器和睡眠/等待循環,連續檢查我們是否仍在atEnd()來輕松實現。 但是, 文檔尚不清楚,如果將新數據附加到文件中,則atEnd()的返回值是否會更改。

如果我使用QTextStream從正在寫入的文件中讀取, atEnd()的返回值會准確反映文件內容的變化嗎?

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

此處獲取的SleepThread代碼。 它只是公開受保護的QThread::msleep()函數。

在應用程序運行時,在終端中鍵入

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

您可以看到,在不重置或重新打開文件的情況下,將文件附加到atEnd()函數atEnd()返回false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM