我正在使用以下代码在 Linux 上删除一个空文件夹:

bool removeFolder (const QString& path)
{
   QDir dir(path);
   assert(dir.exists());
   return dir.rmdir(".");
}

出于某种原因,它有时会返回 false(对于特定文件夹,但这些文件夹似乎没有任何错误)。如果我随后使用 <unistd.h> 中的::rmdir 删除同一个文件夹,它会成功。
我怎么知道为什么 QDir::rmdir 失败了?

到目前为止,这在 Windows 上从未发生过,QDir::rmdir 可以正常工作。

最佳答案

确认:在windown 上工作,在linux 上失败。
阅读 中的“rmdir”文档,这里是 https://pubs.opengroup.org/onlinepubs/007904875/functions/rmdir.html ,它说“如果路径参数指的是最终组件是点或点点的路径,则 rmdir() 将失败。”所以可能发生的事情是 QDir::rmdir() 在 linux 中调用 unistd rmdir() 函数,而这个函数失败并显示“.”。
我试图只使用完整的绝对路径( QDir::rmdir(absolutePath) )并且它起作用了;然而,我认为在 unistd 的 rmdir() 上使用 QDir::rmdir() 基本上没有意义,所以从现在开始我会坚持使用 unistd rmdir()。
注意:QDir::removeRecursively() 是一个不同的故事:它似乎工作正常,而且它比通过 opendir() 然后连续的 readdir()(或 nftw(...FTW_DEPTH... )东西)。

关于c++ - 诊断 QDir::rmdir 故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18682416/

10-12 16:48