gpt4 book ai didi

c++ - 确保所有字节都正确写入文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:13 25 4
gpt4 key购买 nike

是否有可能检查是否所有字节实际上都写入了 QFile?目前这就是我所有的

QFile f(name);
if (f.open(QIODevice::WriteOnly)){
f.write(bytes);
}

bytes 的大小为 1MB,有时整个 block 没有写入文件,因此我最终得到一个损坏的文件。

最佳答案

在 Qt 5 中你真的应该使用 QSaveFile .它确保了两个非常重要的不变量:

  1. 部分/失败的写入不会损坏现有文件,

  2. 文件在 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();
}

关于c++ - 确保所有字节都正确写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com