我有名为“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也没有写入权限。
答案 0 :(得分:6)
如果您的应用程序没有写入某些目录的权限,则这些文件将存储在位于C:\Users\%USERNAME%\AppData\Local\VirtualStore
的 Windows虚拟商店中。所以实际上你的文件已成功保存(虽然路径被重定向),这就是QFile::copy()
返回true
的原因。
此重定向称为 UAC虚拟化,适用于C:
,C:\Program Files
,C:\Windows
和HKLM\Software
。
我想避免此类问题的最真实方法是坚持在指定位置保存配置数据,例如应用程序数据(在Qt框架的上下文中也将满足跨平台代码的条款)。 / p>