Bur*_*Dor 1 c++ qt read-write qfile
是否可以检查所有字节是否实际上都写在QFile上?目前这就是我的全部
QFile f(name);
if (f.open(QIODevice::WriteOnly)){
f.write(bytes);
}
Run Code Online (Sandbox Code Playgroud)
bytes 大小为1MB,有时整个块没有写入文件,因此我最终得到一个损坏的文件.
在Qt 5中你真的应该使用QSaveFile.它确保了两个非常重要的不变量:
部分/失败写入不会破坏现有文件,
在QSaveFile实例被销毁时刷新文件.
由于这是一个正确的C++类,实现RAII,除了必须调用之外,你不需要做任何特殊的事情来确保它的工作原理commit().含义commit()是:表示您不会再向该文件写入数据.此时,实现可以自由关闭文件,将其刷新到磁盘,并用新文件替换旧文件.
/// When this function returns true, you can be certain that the file contains exactly "foo bar".
bool writeFooBar() {
QSaveFile file(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return false;
if (-1 == file.write("foo bar"))
return false;
return file.commit();
}
Run Code Online (Sandbox Code Playgroud)