我需要将一些文本消息记录到具有以下要求的文件中:
每条短信都在文件末尾的新行中写入。
合理确定每条消息都已正确写入文件。
到目前为止,该函数正在使用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 也说 close()
QFile 来刷新它所有的内部缓冲区就足够了:
void QFileDevice::close()
Reimplemented from QIODevice::close().
Calls QFileDevice::flush() and closes the file. Errors from flush are ignored.
QTextStream 的内部缓冲区呢?
是否有必要在关闭文件之前调用QTextStream::flush()
?
关于第 2 点,我想在写完后立即回读该行是 100% 确定这一点的唯一方法。 (例如,当内核在其缓冲区中仍有数据时可能会发生电源故障)
谢谢。
最佳答案
在您的情况下,不是,因为您要附加 &endl
在每一篇文章中!
写作
&endl
到 QTextStream 将 '\n' 写入流并刷新 流。它等效于:stream << '\n' << flush;
此外,当 QTextStream 由于
&endl
而被刷新时, 它会将所有数据从其写入缓冲区清空到设备中并调用flush()
在设备上。
关于c++ - 是否有必要在关闭 QFile 之前刷新 QTextStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48390738/