我已将一个文件设置为只读 (右击并勾选只读选项)。现在当我尝试使用函数bool QDir::remove(const QString & fileName)
删除该文件时,它无法被删除并返回false
。
我该怎么办?我已尝试通过使用 QFile::setPermission
更改文件权限,但这也返回false
。
有人能为此提供建议吗?
file.setPermissions(QFile::ReadOther | QFile::WriteOther);
file.remove();
应该可以正常工作。
setPermissions()
返回false,这意味着他无法更改权限。 - HiFile.app - best file manager你可以使用QFile设置文件权限。
当然,这仅适用于您拥有用户权限的文件。错误也可能是因为文件在另一个应用程序中打开。
首先,您是否检查了QFile :: error()以查看文件未被删除的原因?
其次,在您仍然无法获得有用的错误消息的情况下,您可以检查源代码以查找更多信息。例如,检查源代码会显示以下内容:
QFile::remove() 使用底层文件引擎进行删除。该文件引擎是特定于平台的,在qfsfileengine_win.cpp中用于Windows。第830行显示它正在使用DeleteFile进行删除,因此您可以通过调用GetLastError来获取更多信息,尽管我希望Qt能够适当地翻译错误消息。
bool QFile::remove ( const QString & fileName ) [static]
用这个代替:
QDir::remove ( const QString & fileName )
QDir::remove()函数不是静态函数。因此,您可以使用父文件路径创建QDir,然后调用remove()函数:
QDir dir(parent's directory);
然后执行删除操作。
dir.remove(fileName);
你尝试过使用 bool QFile::remove(const QString &fileName) 吗?
QFile
类文档中的“平台特定问题”部分。它会告诉你,在Windows上使用setPermissions()
的可用性有些受限。但在我看来,你的问题似乎是因为文件被锁定而无法更改权限(可能是由于应用程序的其他挂起实例或其他程序正在使用该文件)。尝试使用QFile::error()
获取更多信息。如果这没有帮助,你可以尝试直接使用WinAPI。 - HiFile.app - best file manager