【问题标题】:QFile::copy returns true even though copy failed in Windows即使在 Windows 中复制失败,QFile::copy 也会返回 true
【发布时间】:2016-06-25 16:30:01
【问题描述】:

我有一个名为“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 出现在那里。

【问题讨论】:

  • 对不起,你能粘贴一些代码吗?
  • 在帖子中添加了一些代码。

标签: windows qt qfile


【解决方案1】:

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

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

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

【讨论】:

  • 是的。确切地。谢谢。
猜你喜欢
  • 2018-04-02
  • 2014-11-17
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多