在关闭QFile之前是否需要刷新QTextStream?

时间:2018-01-22 21:44:19

标签: c++ linux qt

我需要将一些短信记录到具有以下要求的文件中:

  1. 每条短信都写在文件末尾的新行中。

  2. 合理确定每条消息都已正确写入文件。

  3. 到目前为止,该功能正在使用QTextStreamQFile

    bool FileManager::appendLine(const QString &line)
    {
        if(!m_file.open(QIODevice::Append | QIODevice::Text)) // m_file is a QFile
            return false;
    
        QTextStream ts(&m_file);
    
        ts << line << endl;
    
        bool status = (ts.status() == QTextStream::Ok);
    
        m_file.close();
    
        return status;
    }
    

    第1点满意,但我对第2点有疑问。

    即使是Qt Doc也说QQile close()刷新所有内部缓冲区就足够了:

      

    void QFileDevice :: close()

         

    从QIODevice :: close()重新实现。

         

    调用QFileDevice :: flush()并关闭文件。忽略刷新错误。

    QTextStream的内部缓冲区怎么样?

    在关闭文件之前是否需要调用QTextStream::flush()

    关于第2点,我想在写完之后回读这条线将是100%确定的唯一方法。 (例如,当内核在其缓冲区中仍有数据时,可能会发生电源故障)

    感谢。

1 个答案:

答案 0 :(得分:1)

在你的情况下,不是,因为你在每次写作中附加&endl

  • &endl写入QTextStream会写入&#39; \ n&#39;流和 刷新 流。它等同于:stream << '\n' << flush;

  • 此外,当QTextStream由于&endl而被刷新时,它会将所有数据从其写入缓冲区清空到设备中并在设备上调用flush()