我正在使用以下代码删除Linux上的空文件夹:
bool removeFolder (const QString& path)
{
QDir dir(path);
assert(dir.exists());
return dir.rmdir(".");
}
由于某种原因,它有时会返回false(对于特定的文件夹,但这些文件夹似乎没有任何错误)。如果我随后使用<unistd.h>
中的:: rmdir删除相同的文件夹,则会成功。
我怎么知道为什么QDir::rmdir
失败?
到目前为止,这在Windows上从未发生过,QDir::rmdir
只是有效。
答案 0 :(得分:2)
确认:在windown上工作,在linux上失败。
阅读
我尝试只使用完整的绝对路径( QDir::rmdir(absolutePath) )并且它起作用了;然而,我认为在 unistd 的 rmdir() 上使用 QDir::rmdir() 基本上没有意义,所以从现在开始我会坚持使用 unistd rmdir()。
注意:QDir::removeRecursively() 是一个不同的故事:它似乎工作正常,而且它比通过 opendir() 然后连续的 readdir()(或 nftw(...FTW_DEPTH) 更方便...)东西)。
答案 1 :(得分:0)
尝试使用这个:
dir.rmdir(dir.absolutePath())
答案 2 :(得分:0)
我遇到了同样的问题,但在Windows上,我无法删除QDir().rmdir(path);
的空目录。这发生在一些较旧的硬盘上,所以可能是古老的文件系统应该受到指责。但我找到了一个黑客:
QFile(path).setPermissions(QFile::WriteOther); // this works even for dirs
bool success = QDir().rmdir(path);
当然,如果删除不成功,您应该将权限还原为原始值,但这是一个不同的故事。