2011-03-31 65 views
15

在windows中删除只读文件我已经设置了一个文件为只读(右键单击并只检查一次)。现在,当我尝试使用功能bool QDir::remove(const QString & fileName)删除该文件时,不会删除该文件并返回false
我该如何继续?我试图通过使用QFile::setPermission更改文件的权限来尝试摆弄,但也返回false
任何人都可以建议一个相同的方法吗?Qt C++使用

回答

1

只能为你的用户权限执行文件设置文件权限与QFile

当然这一点。错误也可能是因为该文件在另一个应用程序中打开

+0

显然使用QFile :: setPermissions更改权限也会返回false。 – 2011-03-31 18:08:15

+0

该文件是否在其他内容中打开?你有权删除它吗?你确定文件名是正确的(特别是\ vs/in path) – 2011-03-31 20:04:21

-3

您是否尝试过使用bool QFile :: remove(const QString & fileName)?

1

首先,你检查了QFile::error()看看为什么文件没有被删除?其次,如果您仍然没有收到有用的错误消息,可以查看源代码以了解是否可以获取更多信息。检查源代码将显示以下内容,例如:

QFile::remove()使用底层文件引擎执行删除操作。该文件引擎是特定于平台的,并且适用于Windows的qfsfileengine_win.cpp。 830行显示它使用DeleteFile来执行删除操作,因此您可能可以通过调用GetLastError来获得更多信息,但我希望Qt能够恰当地转换错误消息。

+0

这根本不回答问题。他具体询问如何移除总是以Qfile :: remove()失败的只读文件。 – cen 2013-11-25 19:40:29

-2

QDir :: remove()函数不是静态函数。所以你可以用父文件路径创建QDir并调用然后删除它:

QDir dir(parent's directory);

然后

dir.remove(fileName);

-2

我认为你应该使用这样的:

bool QFile::remove (const QString & fileName) [static] 

,而不是这样的:

QDir::remove (const QString & fileName) 
18
file.setPermissions(QFile::ReadOther | QFile::WriteOther); 
file.remove(); 

应该工作。

+1

这是正确的答案。如果其他人陷入这个问题,就投它票。我一整天都在努力弄清楚这一点。 – cen 2013-11-25 19:53:52