首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QSaveFile::commit() fsync()文件到文件系统吗?

QSaveFile::commit() fsync()文件到文件系统吗?
EN

Stack Overflow用户
提问于 2022-10-13 06:46:59
回答 1查看 24关注 0票数 0

建议使用QSaveFile对文件系统进行原子写入。它怎麽工作?

QSaveFile::commit() fsync()文件到文件系统吗?

EN

回答 1

Stack Overflow用户

发布于 2022-10-13 06:46:59

是,也不是。

它写入临时文件fsync()-it,然后将其重命名为所需的文件名。但是重命名不是fsync()-ed。因此,在出现断电的情况下,新文件将在操作系统决定编写之前不会发生。

我的解决方案是在commit():(仅linux)之后调用它。

代码语言:javascript
运行
复制
#include <unistd.h>
#include <fcntl.h>

saveFile.write(saveDoc.toJson());
saveFile.commit();

QFileInfo fi(saveFile.fileName());
int fd = ::open(fi.absolutePath().toLocal8Bit().data(), O_RDONLY);
::fsync(fd);
::close(fd);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74051505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档