Qt C++如何在Windows中删除只读文件

16

我已将一个文件设置为只读 (右击并勾选只读选项)。现在当我尝试使用函数bool QDir::remove(const QString & fileName)删除该文件时,它无法被删除并返回false
我该怎么办?我已尝试通过使用 QFile::setPermission 更改文件权限,但这也返回false
有人能为此提供建议吗?


请阅读QFile类文档中的“平台特定问题”部分。它会告诉你,在Windows上使用setPermissions()的可用性有些受限。但在我看来,你的问题似乎是因为文件被锁定而无法更改权限(可能是由于应用程序的其他挂起实例或其他程序正在使用该文件)。尝试使用QFile::error()获取更多信息。如果这没有帮助,你可以尝试直接使用WinAPI。 - HiFile.app - best file manager
6个回答

20
file.setPermissions(QFile::ReadOther | QFile::WriteOther);
file.remove();

应该可以正常工作。


1
这是正确的答案。如果有人遇到同样的问题,请给它投票。我花了一整天的时间才解决这个问题。 - cen
似乎OP所写的是setPermissions()返回false,这意味着他无法更改权限。 - HiFile.app - best file manager

1

你可以使用QFile设置文件权限。

当然,这仅适用于您拥有用户权限的文件。错误也可能是因为文件在另一个应用程序中打开。


显然,使用QFile :: setPermissions更改权限也会返回false。 - Eternal Learner
文件是否被其他程序打开?您有删除权限吗?您确定文件名正确(特别是路径中的\和/)? - Martin Beckett

1

首先,您是否检查了QFile :: error()以查看文件未被删除的原因?

其次,在您仍然无法获得有用的错误消息的情况下,您可以检查源代码以查找更多信息。例如,检查源代码会显示以下内容:

QFile::remove() 使用底层文件引擎进行删除。该文件引擎是特定于平台的,在qfsfileengine_win.cpp中用于Windows。第830行显示它正在使用DeleteFile进行删除,因此您可以通过调用GetLastError来获取更多信息,尽管我希望Qt能够适当地翻译错误消息。


这完全没有回答问题。他特别是在问如何删除只读文件,但使用Qfile::remove()函数总是失败。 - cen

-2
我认为你应该使用这个:
bool QFile::remove ( const QString & fileName ) [static]

用这个代替:

QDir::remove ( const QString & fileName ) 

-2

QDir::remove()函数不是静态函数。因此,您可以使用父文件路径创建QDir,然后调用remove()函数:

QDir dir(parent's directory);

然后执行删除操作。

dir.remove(fileName);


-3

你尝试过使用 bool QFile::remove(const QString &fileName) 吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接