Qt删除文件夹时父文件夹一并删除的原因与解决办法

Qt删除文件夹及子文件夹全部文件时父文件夹一并删除的原因与解决办法

初学Qt文件操作,总会先去查阅各种资料,参考各种代码然后一点点地去调试。
我在编写“删除文件夹及子目录与所有文件”代码的时候,参考很多博客、专栏之后看到很多都是同样的代码。如下:

//删除文件夹
bool MainWindow::DelDir(const QString &path)
{
    if (path.isEmpty()){
        return false;
    }
    QDir dir(path);
    if(!dir.exists()){
        return true;
    }
    dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
    QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
    foreach (QFileInfo file, fileList){ //遍历文件信息
        if (file.isFile()){ // 是文件,删除
            file.dir().remove(file.fileName());
        }else{ // 递归删除
            DelDir(file.absoluteFilePath());
        }
    }
    return dir.rmpath(dir.absolutePath()); // 删除文件夹 
}

这个代码我拿来做测试,发现将父文件夹一并删除了,然后在父文件夹中随便建立一个txt文本再进行测试发现,父文件保留了下来,因此猜测:程序中存 “在当父文件夹为空时,删除文件夹路径时将一并删除父文件夹路径” 。
因此去查看代码与函数方法性质,同时在IDE上测试。
在路径方法上做测试的时候,输入“dir.rm”发现有两个方法:
1、rmpath;
2、rmdir;
故去查找函数方法介绍,得其原因,rmpath与rmdir的区别就在于:rmpath会在删除空文件夹的时候,将空的父文件夹一并删除。将rmpath换成rmdir后,问题解决。

附:个人觉得在查阅博客资料之后一定要做尽量多种情况的测试,并且将实际情况考虑完全,在代码中优化。
例:若是某目录的子目录不存在,可直接用mkdir创建子目录,倘若当前目录或者其父目录不存在呢?

阿猪米德
2019.05.09于湖北武汉

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值