QT 实现文件夹的删除

190 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

前提

在我们平时删除文件夹的过程中,我们可以直接删除文件夹,也可以删除文件夹里面内容后在将文件夹删除。在我们使用代码删除文件夹也是同样的逻辑。在我使用文件夹删除时,使用了好几种方法,现在向他们逐一展示。

第一种 使用removeRecursively 的方式进行删除

代码:

QString delPath = QString("./qqq/aaa");

QDir dir;

dir.setPath(delPath);

dir.removeRecursively()

优点: 这个方法可以快速的删除文件夹,可以通过removeRecursively的方法直接删除文件夹包括文件内部所有的东西。 缺点:在使用的过程中,他特别容易出现误删除的情况,有的时候只是为了删除指定的文件夹,但是他有可能删除他的父文件夹,这是在我使用的过程中发现的问题。

第二种 使用rmpath 的方式进行删除

代码:


bool JC_Flie::**DeleteDir**(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{ // 递归删除

            DeleteDir(file.absoluteFilePath());

        }

    }

    return dir.rmpath(dir.absolutePath()); // 删除文件夹

}

缺点:在文件夹删除的过程中,他需要一直遍历,会比较浪费时间。

优点:在使用过程中相对一第一个方法它更安全,他只是通过便利的方法将文件夹中的每一个文件删除后才会进行删除文件夹的操作。

用法简单介绍

absoluteFilePath它返回的是目录当中文件的绝对路径名,但是他不检查文件是不是存储于当前的目录之下。

absolutePath他通过返回绝对路径,但是他不会包含多余的目录分隔符。

filePath它返回的是 当前文件路径名称。

总结

在进行文件夹慈善出的时候踩到的一些坑,在这里进行了讲解,但是由于新手,可能在部分没有完全的认识到,如果发现问题,请各位大佬及时指正!