[原]QT遍历文件夹所有文件,删除指定大小的所有文件,情况空所有文件夹

QtDeleteTMS.h

复制代码
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtDeleteTMS.h"

class QtDeleteTMS : public QMainWindow
{
    Q_OBJECT

public:
    QtDeleteTMS(QWidget *parent = Q_NULLPTR);
    int DeleteFile(const QString& _filePath);
    int ClearEmptyDir(const QString& _filePath);
private:
    Ui::QtDeleteTMSClass ui;
private slots:
    void _slotBtnChosePath();
    void _slotBtnDeleteFiles();    
};
复制代码

 

 

QtDeleteTMS.cpp

复制代码
#include "QtDeleteTMS.h"
#include <QFileDialog>
#include <qdebug>
#include <QMessageBox>

QtDeleteTMS::QtDeleteTMS(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(_slotBtnChosePath()));
    connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(_slotBtnDeleteFiles()));
}

void QtDeleteTMS::_slotBtnChosePath()
{
    QString srcDirPath = QFileDialog::getExistingDirectory(
        this, "choose src Directory",
        "/");

    ui.lineEdit->setText(srcDirPath);

   // qDebug() << srcDirPath;

}

int FindFile(const QString& _filePath)//查询数据
{
    QDir dir(_filePath);

    if (!dir.exists()) {
        return -1;
    }

    //取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);

    //文件夹优先
    dir.setSorting(QDir::DirsFirst);

    //转化成一个list
    QFileInfoList list = dir.entryInfoList();
    QStringList infolist = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
    if (list.size() < 1) {
        return -1;
    }
    int i = 0;

    //递归算法的核心部分
    do {
        QFileInfo fileInfo = list.at(i);
        //如果是文件夹,递归
        bool bisDir = fileInfo.isDir();
        if (bisDir) {
            FindFile(fileInfo.filePath());
        }
        else {
            for (int m = 0; m < infolist.size(); m++) {
                //这里是获取当前要处理的文件名
                qDebug()<< infolist.at(m);
            }
            break;
        }//end else
        i++;
    } while (i < list.size());
    return 0;
}


int QtDeleteTMS::DeleteFile(const QString& _filePath)//删除数据
{
    QDir dir(_filePath);

    if (!dir.exists()) {
        return -1;
    }

    //取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);

    //文件夹优先
    dir.setSorting(QDir::DirsFirst);

    //转化成一个list
    QFileInfoList list = dir.entryInfoList();
    QStringList infolist = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
    if (list.size() < 1) {
        return -1;
    }
    int i = 0;

    //递归算法的核心部分
    do {
        QFileInfo fileInfo = list.at(i);
        //如果是文件夹,递归
        bool bisDir = fileInfo.isDir();
        if (bisDir) {
            DeleteFile(fileInfo.filePath());
        }
        else {
            for (int m = 0; m < infolist.size(); m++) {
                //这里是获取当前要处理的文件名
                QString _name = _filePath + "/" + infolist.at(m);
                QFileInfo info(_name);
                if (info.size() < ui.spinBox->value())
                {
                    QFile::remove(_name);
                    qDebug() << "delete " << _name;
                }                    
            }
            break;
        }//end else
        i++;
    } while (i < list.size());

    return 0;
}

//清理空文件夹
int QtDeleteTMS::ClearEmptyDir(const QString& _filePath)
{
    QDir dir(_filePath);

    if (!dir.exists()) {
        return -1;
    }

    //取到所有的文件和文件名,但是去掉.和..的文件夹(这是QT默认有的)
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);

    //文件夹优先
    dir.setSorting(QDir::DirsFirst);

    //转化成一个list
    QFileInfoList list = dir.entryInfoList();
    QStringList infolist = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
    if (list.size() < 1) {
        return -1;
    }
    int i = 0;

    //递归算法的核心部分
    do {
        QFileInfo fileInfo = list.at(i);
        //如果是文件夹,递归
        bool bisDir = fileInfo.isDir();
        if (bisDir) {
            ClearEmptyDir(fileInfo.filePath());

            QDir dirTemp(fileInfo.filePath());
            QFileInfoList fileListTemp = dirTemp.entryInfoList(QDir::Dirs | QDir::Files
                | QDir::Readable | QDir::Writable
                | QDir::Hidden | QDir::NoDotAndDotDot
                , QDir::Name);
            if (fileListTemp.size() == 0) /* 下层没有文件或文件夹 则直接删除*/
            {
                dirTemp.rmdir(".");
            }
        }
        else {
            //是文件就不管
        }//end else
        i++;
    } while (i < list.size());

    return 0;
}

void QtDeleteTMS::_slotBtnDeleteFiles()
{
    QString srcDirPath = ui.lineEdit->text();

    //FindFile(srcDirPath);
    //DeleteFile(srcDirPath);
    ClearEmptyDir(srcDirPath);

    QMessageBox::information(NULL, "info", "delete ok!");
}
复制代码

 

posted @   南水之源  阅读(481)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示