我需要将一些短信记录到具有以下要求的文件中:
每条短信都写在文件末尾的新行中。
合理确定每条消息都已正确写入文件。
到目前为止,该功能正在使用QTextStream
和QFile
:
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%确定的唯一方法。 (例如,当内核在其缓冲区中仍有数据时,可能会发生电源故障)
感谢。
答案 0 :(得分:1)
在你的情况下,不是,因为你在每次写作中附加&endl
!
将&endl
写入QTextStream会写入&#39; \ n&#39;流和 刷新 流。它等同于:stream << '\n' << flush;
此外,当QTextStream由于&endl
而被刷新时,它会将所有数据从其写入缓冲区清空到设备中并在设备上调用flush()
。