QFile::copy returns 即使在 Windows 中复制失败也是如此

QFile::copy returns true even though copy failed in Windows

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

UPD:复制,例如,复制到 C:/Users 也需要管理员权限失败,因为它应该 (returns 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";

此代码生成 "Copy succeful",而我既没有对 C:/ 的写入权限,也没有实际文件 somefile.pdf 出现在那里。

当您的应用程序没有写入某些目录的权限时,文件将存储到位于 C:\Users\%USERNAME%\AppData\Local\VirtualStoreWindows 虚拟存储 中。所以实际上你的文件已成功保存(尽管路径被重定向),这就是为什么 QFile::copy() returns true.

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

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