即使在Windows中复制失败,QFile :: copy也会返回true

时间:2016-06-25 16:30:02

标签: windows qt qfile

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

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

UPD:

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也没有写入权限。

1 个答案:

答案 0 :(得分:6)

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

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

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