复制文件,即使目标存在(在Qt中)
Copy file even when destination exists (in Qt)
在QFile::copy文档中,它显示
如果名为newName的文件已经存在,则copy()返回false(即QFile不会覆盖它)。
但是,即使目的地存在,我也需要复制一个文件。Qt中有什么解决方法吗?
删除文件是显而易见的解决方案,但它会引发竞争条件。。。
if (QFile::exists("/home/user/dst.txt"))
{
QFile::remove("/home/user/dst.txt");
}
QFile::copy("/home/user/src.txt", "/home/user/dst.txt");
显而易见的解决方案当然是在进行复制之前删除文件(如果存在)。
然而,请注意,这样做会使代码处于经典的竞争条件,因为在典型的多任务操作系统上,不同的进程可能会在应用程序的删除和复制调用之间重新创建文件。这会导致复制仍然失败,所以你需要做好准备(也许可以重新尝试删除,但这可能会带来计数的需要,这样你就不会花太多时间尝试了)。
我能想到的最简单的重试是:
while !QFile::copy("/home/user/src.txt", "/home/user/dst.txt")
{
QFile::remove("/home/user/dst.txt");
}
但这仍然不是一个真正的解决方案,因为一些比赛条件并不能阻止移除。
我目前正在寻找一种方法来处理将网页作为输出进行编写,但不需要在删除和复制之间进行自动刷新。
在调用copy()
之前只需调用remove()
相关文章:
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 无法在这个基本的Qt代码片段中找到错误,但我被告知它肯定存在?
- C++,QT. QShortcut的函数调用不存在
- 如果存在 QSQLITE 数据库,则根据 qt 中的行值插入或更新
- libGL确实存在,但链接器找不到它 - Qt 4.8.7,CentOS 7.5
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- QT 打开不存在的数据库
- 使用导入的图像保存在 QT 中的 QLabel 中,保存 GUI 的状态
- 使用 qt c++ 检查 Xml 中是否存在根元素
- C++/Qt项目中的连接功能中不存在插槽?(已经重新运行了制作)
- 如何使用QT检查程序是否存在于路径中
- QT设计器中的自定义小部件在框架中具有预先存在的布局
- QT图像查看器示例,可能存在内存泄漏
- QT错误:搜索不存在的函数
- Qt UI 存在,但 UI 标头和源不存在
- 如何知道基于项目的ListView QT C 中是否存在字符串
- 部署Qt-dll文件-找不到windows插件,尽管平台/qwindows.dll存在,因此存在libEGL和libGL
- qt检查文件中是否存在文件,如果它没有提示用户输入其位置,则将文件复制到程序工作目录
- 将非托管"QT" dll 导入 C# 给出 dllNotFoundException 但存在
- 在QT中制作了一个文本浏览器,但代码就像它不存在一样?