windows - QFile::copy 返回真,即使在 Windows 中复制失败

标签 windows qt qfile

我有一个名为“src”的 QString 变量,它包含一个文件名。操作 QFile::copy(src, target) 工作正常,直到目标是“C:”或“C:/”(我在 Windows 10 中遇到问题)。在这种情况下,操作返回 true,即使我没有看到任何实际复制到 C:/的文件(事实上,通常我不能在没有管理员权限的情况下将任何内容复制到 C:/)。此外,当我调试时,我看到它说它已复制到 C://(两个斜杠)。是 Qt 错误还是我错过了什么?

UPD:复制,例如,到 C:/Users 也需要管理员权限失败,因为它应该(返回 false)。 Qt 版本为 5.7。

更新:

QString src = "C:/Stuff/somefile.pdf";
QString target = "C:/somefile.pdf";
if (QFile::copy(src, target)) qDebug() << "Copy successful";
else qDebug() << "Copy failed";

此代码产生“复制成功”,而我既没有对 C:/的写入权限,也没有实际文件 somefile.pdf 出现在那里。

最佳答案

当您的应用程序没有写入某些目录的权限时,文件将存储到位于 C:\Users\%USERNAME%\AppData\Local\的 Windows Virtual Store虚拟商店。所以实际上您的文件已成功保存(尽管路径被重定向),这就是 QFile::copy() 返回 true 的原因。

此重定向称为 UAC 虚拟化,适用于 C:C:\Program FilesC:\WindowsHKLM\Software

我想最真正避免此类问题的方法是坚持将配置数据保存在指定位置,例如应用程序数据(在 Qt 框架的上下文中也符合跨平台代码的条款)。

关于windows - QFile::copy 返回真,即使在 Windows 中复制失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030550/

相关文章:

c# - 以编程方式打印文档

c++ - 发送到 : An invalid argument was supplied

c++ - 使用几何着色器实现裁剪平面?

c++ - Qt 的 foreach 中的第二项是否仅评估一次?

c++ - 如何在Qt中映射资源文件?

c - Linux 上 C 中的 UDP 发送方和 Windows 上 Qt 中的接收方不工作?

windows - 将环境变量从powershell传递到MSYS2 bash

c++ - Qt 如何将文件移动到另一个现有目录

c++ - Qt 6.4 中的高 DPI 缩放在 Windows 上无法开箱即用(适用于 Qt 示例)

c++ - Qt5 QFile::close() 写入速度非常慢