首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >诊断QDir::rmdir故障

诊断QDir::rmdir故障
EN

Stack Overflow用户
提问于 2013-09-08 17:54:02
回答 3查看 1.2K关注 0票数 4

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

代码语言:javascript
复制
bool removeFolder (const QString& path)
{
   QDir dir(path);
   assert(dir.exists());
   return dir.rmdir(".");
}

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

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

EN

回答 3

Stack Overflow用户

发布于 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))要方便得多。

票数 2
EN

Stack Overflow用户

发布于 2018-04-05 22:15:49

我也有同样的问题,但在Windows上,我无法使用QDir().rmdir(path);删除空目录。这发生在一些较旧的硬盘上,所以可能是古老的文件系统造成的。但我发现了一个黑客:

代码语言:javascript
复制
QFile(path).setPermissions(QFile::WriteOther); // this works even for dirs
bool success = QDir().rmdir(path);

当然,如果删除不成功,您应该将权限恢复为原始值,但那是另一回事。

票数 1
EN

Stack Overflow用户

发布于 2014-02-11 22:14:30

试着使用这个:

代码语言:javascript
复制
dir.rmdir(dir.absolutePath())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18682416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档