[原]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!"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具