当前位置:网站首页>Qt实战案例(55)——利用QDir删除选定文件目录下的空文件夹
Qt实战案例(55)——利用QDir删除选定文件目录下的空文件夹
2022-08-01 12:49:00 【wendy_ya】
一、项目介绍
本文介绍利用QDir删除选定文件目录下的所有空文件夹。
二、项目基本配置
新建一个Qt案例,项目名称为“DelTest”,基类选择“QWidget”,点击选中创建UI界面复选框,完成项目创建。
三、UI界面设置
UI界面如下:
| 序号 | 名称 | 类型 | 属性 |
|---|---|---|---|
| ① | pbn_del | QPushButton | text:请选择要删除的目录 |
四、主程序实现
4.1 widget.h头文件
头文件中只需声明按钮点击槽函数:
private slots:
void on_pbn_del_clicked();
4.2 widget.cpp源文件
定义函数checkFileOrDirExist检查目录是否存在:
bool checkFileOrDirExist(const QString qstrFileDirOrPath)
{
bool bRet = false;
QFileInfo objFileInfo(qstrFileDirOrPath);
if(objFileInfo.isFile())
{
bRet = objFileInfo.exists();
}
else if(objFileInfo.isDir())
{
bRet = objFileInfo.exists();
}
else
{
bRet = false;
}
return bRet;
}
定义clearEmptyFolder用于删除空的文件夹,返回的类型为bool类型若为true则表示删除成功,若为false则表示删除失败:
/************************************************** * 功能:删除空的文件夹 * 输入参数: * qstrDirPath:文件夹路径 * 返回值: * bool:true -- 删除成功,false -- 删除失败 * **************************************************/
bool clearEmptyFolder(const QString& qstrDirPath)
{
bool bRet = true;
do
{
if(!checkFileOrDirExist(qstrDirPath))
{
bRet = true;
break;
}
QDir qdrPath(qstrDirPath);
qdrPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); //设置过滤器
QFileInfoList lstFileInfo = qdrPath.entryInfoList(); //获取所有文件信息
foreach(QFileInfo objFileInfo, lstFileInfo)
{
if(objFileInfo.isDir())
{
QString qstrSubFilePath = objFileInfo.absoluteFilePath();
clearEmptyFolder(qstrSubFilePath);
QDir qdrSubPath(qstrSubFilePath);
qdrSubPath.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
QFileInfoList qlstFileInfo = qdrSubPath.entryInfoList();
if(qlstFileInfo.count() <= 0)
{
qDebug()<<QString("remove empty dir: %1.").arg(qstrSubFilePath);
qdrSubPath.rmdir(qstrSubFilePath);
}
}
}
}while(0);
return bRet;
}
按钮点击槽函数:
void Widget::on_pbn_del_clicked()
{
//选择文件目录
QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
"",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);
qDebug()<<dir;
bool isok=clearEmptyFolder(dir);
if(isok)
QMessageBox::information(this,"success","删除完成");
else
QMessageBox::information(this,"error","错误");
}
五、效果演示
完整效果如下:

如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/86268682
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~
边栏推荐
- MMF的初步介绍:一个规范化的视觉-语言多模态任务框架
- 快速理解拉格朗日乘子法
- Alibaba Cloud Official Redis Development Specification
- Feign 从注册到调用原理分析
- 易周金融分析 | 银行ATM机智能化改造提速;互联网贷款新规带来挑战
- Multithreading Case - Timer
- How to Integrate Your Service Registry with Istio?
- tensorflow2.0 handwritten digit recognition (tensorflow handwriting recognition)
- 实现集中式身份认证管理的案例
- 故障007:dexp导数莫名中断
猜你喜欢

芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)

CloudCompare & PCL ICP registration (point to face)

Multi-threaded cases - blocking queue

这项工作事关中小学生生命安全!五部门作出联合部署

数字孪生北京故宫,元宇宙推进旅游业进程

重磅消息 | Authing 实现与西门子低代码平台的集成

Apex installation error

论文笔记All about Eve: Execute-Verify Replication for Multi-Core Servers

Alibaba Cloud Official Redis Development Specification

PanGu-Coder:函数级的代码生成模型
随机推荐
芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)
Why does the maximum plus one equal the minimum
浏览器存储
如何降低Istio服务网格中Envoy的内存开销
How to Integrate Your Service Registry with Istio?
Meshlab & Open3D SOR filtering
PanGu-Coder:函数级的代码生成模型
高仿项目协作工具【Worktile】,从零带你一步步实现组织架构、网盘、消息、项目、审批等功能
数字孪生北京故宫,元宇宙推进旅游业进程
测试发文
VIP的实现原理
易周金融分析 | 银行ATM机智能化改造提速;互联网贷款新规带来挑战
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
实现集中式身份认证管理的案例
一文带你彻底厘清 Kubernetes 中的证书工作机制
态路小课堂丨浅谈优质光模块需要具备的条件!
这项工作事关中小学生生命安全!五部门作出联合部署
postgresql之page分配管理(一)
一文带你彻底厘清 Isito 中的证书工作机制
如何设计一个分布式 ID 发号器?