我正在使用以下代码在Linux上删除一个空文件夹:
bool removeFolder (const QString& path)
{
QDir dir(path);
assert(dir.exists());
return dir.rmdir(".");
}由于某些原因,它有时会返回false (对于特定的文件夹,但这些文件夹似乎没有任何错误)。如果我随后使用<unistd.h>中的::rmdir删除相同的文件夹,它会成功。我如何知道QDir::rmdir失败的原因?
到目前为止,这种情况在Windows上从未发生过,QDir::rmdir可以正常工作。
发布于 2021-03-01 01:04:35
确认:在windown上工作,在linux上失败。
读取"rmdir“文档,这里是https://pubs.opengroup.org/onlinepubs/007904875/functions/rmdir.html,它说”如果路径参数引用的路径的最后组成部分是点或点,则rmdir()将失败“。所以可能发生的情况是QDir::rmdir()调用linux中的unistd rmdir()函数,而这个调用失败并返回".“。
我试着只使用完整的绝对路径( QDir::rmdir(absolutePath) ),它起作用了;然而,我认为使用QDir::rmdir()而不是unistd的rmdir()基本上没有意义,所以从现在开始我将坚持使用unistd rmdir()。
注意: QDir::removeRecursively()是另一回事:它看起来工作得很好,而且它比使用opendir(),然后是连续的readdir()(或者...FTW_DEPTH(Nftw))要方便得多。
发布于 2018-04-05 22:15:49
我也有同样的问题,但在Windows上,我无法使用QDir().rmdir(path);删除空目录。这发生在一些较旧的硬盘上,所以可能是古老的文件系统造成的。但我发现了一个黑客:
QFile(path).setPermissions(QFile::WriteOther); // this works even for dirs
bool success = QDir().rmdir(path);当然,如果删除不成功,您应该将权限恢复为原始值,但那是另一回事。
发布于 2014-02-11 22:14:30
试着使用这个:
dir.rmdir(dir.absolutePath())https://stackoverflow.com/questions/18682416
复制相似问题