使用Qt中的QDir类进行目录操作
文章目录
- 概述
- QDir类的基本功能
- 获取当前目录
- 创建目录
- 列出目录内容
- 筛选目录内容
- 筛选特定命名文件
- 复制文件和目录
- 删除文件和目录
- 更改文件名
- 应用场景
- 总结
概述
Qt是一个跨平台的C++应用程序开发框架,其中提供了许多方便的类来处理文件和目录操作。其中,QDir类是用于处理目录(文件夹)的核心类之一。在本篇博文中,我们将详细介绍如何使用QDir类进行目录操作,并提供一些实际应用场景。
QDir类的基本功能
QDir类提供了一系列函数来操作目录,包括创建目录、列出目录内容、复制文件和目录、删除文件和目录等。首先,我们需要包含头文件:
#include <QDir>
获取当前目录
我们可以使用QDir的静态成员函数currentPath()来获取当前应用程序的工作目录:
QString currentPath = QDir::currentPath();
创建目录
要创建一个新的目录,我们可以使用mkdir()函数。如果目录已经存在,则该函数会返回false,否则返回true。
QDir directory;
if (directory.mkdir("new_directory")) {// 目录创建成功
} else {// 目录已存在或创建失败
}
列出目录内容
我们可以使用entryList()函数列出目录中的所有文件和子目录。这个函数返回一个QStringList,其中包含了所有的文件和子目录名称。
QStringList filesAndDirs = directory.entryList();
foreach (const QString& name, filesAndDirs) {qDebug() << name;
}
筛选目录内容
要对文件进行筛选,你可以使用entryList()函数的重载版本,并指定一个过滤器来选择特定类型的文件。过滤器是一个枚举类型QDir::Filter,可以选择文件、目录、隐藏文件等。以下是一个示例,演示如何只打印文件而不包含子目录:
#include <QDir>
#include <QDebug>int main() {QDir directory("/path/to/your/directory"); // 修改为你想遍历的目录路径QStringList files = directory.entryList(QDir::Files);foreach (const QString& fileName, files) {qDebug() << "File:" << fileName;}return 0;
}
在这个示例中,我们使用QDir::Files过滤器,仅获取目录下的文件列表,而不包含子目录。这样,输出将只包含目录中的文件,而忽略子目录的内容。
除了QDir::Files,还有其他一些过滤器可以使用:
QDir::Dirs:获取目录下的所有子目录。
QDir::AllEntries:获取目录下的所有文件和子目录(包括隐藏文件和隐藏目录)。
QDir::NoDotAndDotDot:排除特殊目录.和..。
QDir::Hidden:获取隐藏的文件和目录。
筛选特定命名文件
比如说要筛选出.ini文件,你可以使用entryList()函数的重载版本,并指定一个文件过滤器来选择只包含.ini扩展名的文件。以下是一个示例,演示如何只打印出目录中的.ini文件:
#include <QDir>
#include <QDebug>int main() {QDir directory("/path/to/your/directory"); // 修改为你想遍历的目录路径QStringList iniFiles = directory.entryList(QStringList() << "*.ini", QDir::Files);foreach (const QString& iniFile, iniFiles) {qDebug() << "INI File:" << iniFile;}return 0;
}
复制文件和目录
要复制文件或目录,可以使用QFile::copy()函数和QDir::rename()函数。
QFile::copy("sourceFile.txt", "destinationFile.txt");QDir directory;
directory.rename("sourceDirectory", "destinationDirectory");
删除文件和目录
我们可以使用QFile::remove()函数和QDir::rmdir()函数删除文件和目录。
QFile::remove("fileToRemove.txt");QDir directory;
directory.rmdir("directoryToRemove");
更改文件名
我们可以使用QDir ::rename()函数和QDir::rmdir()函数删除文件和目录。
bool renameFile(const QString& directoryPath, const QString& oldFileName, const QString& newFileName) {QDir directory(directoryPath);if (directory.exists(oldFileName)) {if (directory.rename(oldFileName, newFileName)) {qDebug() << "File renaming successful!";return true;} else {qDebug() << "File renaming failed!";return false;}} else {qDebug() << "File not found!";return false;}
}
应用场景
QDir类在很多实际应用场景中都能发挥作用,比如:
文件和目录管理:在应用程序中进行文件和目录的创建、复制、删除和重命名等操作,实现数据的管理和存储。
批量处理:当需要对某个目录下的一组文件进行批量处理时,可以使用QDir类遍历目录中的所有文件,然后对每个文件进行相应操作。
目录比较:比较两个目录中的文件和子目录,查找差异或进行同步操作。
文件搜索:使用QDir类的entryList()函数配合正则表达式,可以实现对目录中符合特定规则的文件进行搜索。
日志管理:在记录日志的时候,可以使用QDir类创建和管理日志文件。
总结
QDir类是Qt框架中用于目录操作的重要工具。通过简单的接口,我们可以轻松地进行目录的创建、列出、复制、删除等操作,满足各种实际应用场景的需求。它使得文件和目录管理变得更加简单和高效,提高了应用程序的可维护性和扩展性。无论是桌面应用、后台服务还是命令行工具,QDir类都可以为我们提供强大的支持。希望这篇博文能够帮助你更好地了解和应用QDir类,提高你的Qt开发技能。
相关文章:
使用Qt中的QDir类进行目录操作
文章目录 概述QDir类的基本功能获取当前目录创建目录列出目录内容筛选目录内容筛选特定命名文件 复制文件和目录删除文件和目录更改文件名 应用场景总结 概述 Qt是一个跨平台的C应用程序开发框架,其中提供了许多方便的类来处理文件和目录操作。其中,QDi…...
qt服务器 网络聊天室
widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this); }Widget::~Widget() {delete ui; }//启动…...
meanshift算法通俗讲解【meanshift实例展示】
meanshift算法原理 meanshift算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可能要移动这个窗口到点集密度最大的区域当中。 如下图: 最开始的窗口是蓝色圆环的区域,命名为C1。蓝…...
正交变换和仿射变换
正交变换和仿射变换 平面的正交变换 正交点变换(保距变换) 平面上的一个保持任意两点距离不变的点变换 平面正交变换性质 正交变换的乘积是正交变换恒等变换是正交变换正交变换将(不)共线的三点映射成(不)…...
Electron 多端通信桥 MessageChannelMain和 MessagePortMain 坑点汇集
简介 MessageChannelMain 是 DOM MessageChannel 对象的主进程等价对象。 它的特有功能是创建一对已连接的 MessagePortMain 对象。 Electron 本身为了灵活追加 on("message") 机制,就说明该 MessageChannelMain 已经被创建了,而 Web 开发中&a…...
Html5播放器按钮在移动端变小的问题解决方法
Html5播放器按钮在移动端变小的问题解决方法 用手机浏览器打开酷播云视频,有时会出现播放器按钮太小的情况,此时只需在<head>中加入下面这段代码即可解决: <meta name"viewport" content"widthdevice-width, initia…...
Rust 开发环境搭建【一】
Rust 开发环境 推荐 搭建: 安装 rust 语言 以及 工具链 推荐安装方法:rustup curl --proto ‘https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh 在国内如果访问速度慢,可以使用清华大学提供的镜像服务: https://mirrors.tu…...
C# Blazor 学习笔记(3):路由管理
文章目录 前言路由管理App.razor设置登录页面设置空布局 前言 我们知道使用Blazor的官方模板,我们会自动得到一个拥有侧边栏的布局页面。但是我们发现我们所有新建的页面都有侧边栏。有时候我们需要跳出这个布局,比如我要做登录页面的时候,我…...
int[]数组转Integer[]、List、Map「结合leetcode:第414题 第三大的数、第169题 多数元素 介绍」
文章目录 1、int[ ] 转 Integer[ ]:2、两道leetcode题遇到的场景:2.1、int[ ] 转 List<Integer> :2.2、int[ ] 转 Map: 1、int[ ] 转 Integer[ ]: public static void main(String[] args) {int[] nums {1, 2, 3}; Integer[] array Arrays.stream(nums).boxed().to…...
vue子传父的一种新方法:this.$emit(‘input‘, value)可实现实时向父组件传值
今天要说的就是利用v-model和this.$emit(‘input’,value)实现子传父。 众所周知,v-model是给input绑定,方便对表单的双向绑定。 其实,v-model是个语法糖,具体案例如下所示。 <input v-model"inputValue">相当于…...
【Web】web
dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层——传输层——网络层——数据链路层——物理层 每一定的台主机都有一个唯一且固定的地址标识——IP地址 IP地址的做用:1.区分用户和计算机;2.进行通信 IP地址由32位二进制数组成,…...
css中的bfc是什么?
什么bfc? BFC(Block Formatting Context)块级 格式化 上下文。 BFC就是页面上的一个隔离的独立盒子,容器里面的子元素和外面的元素不会相互影响。 为什么要bfc? bfc是我们去主动触发的,并不是自动就存在的,它是帮助我们解决cs…...
【前端知识】React 基础巩固(四十四)——其他Hooks(useContext、useReducer、useCallback)
React 基础巩固(四十四)——其他Hooks(useContext、useReducer、useCallback) 一、useContext的使用 在类组件开发时,我们通过 类名.contextType MyContext的方式,在类中获取context,多个Context或者在函数式组件中…...
华为云hcip核心知识笔记(数据库服务规划)
华为云hcip核心知识笔记(数据库服务规划) 1.云数据接库优势 1.1云数据库优点有: 易用性强:能欧快速部署和运行 高扩展:开放式架构和云计算存储分离 低成本:按需使用,成本更加低廉 2.云数据库r…...
【有趣的】关于Map的一些小测试
Map在代码中用到得非常多,它是无序的、key-value结构的,其读取会非常快。 今天看了个小文章Map判空 、空字符串、空key值等各种判断方法,你都掌握了吗?便自己也玩一下。 一、判空 因为对象已经new出来了,所以map指向的…...
【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC,拥挤距离与皮尔逊系数法结合实现回归与分类预测
【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC,拥挤距离与皮尔逊系数法结合实现回归与分类预测 思路 考虑拥挤距离指标与PCC皮尔逊相关系数法相结合,对回归或分类数据进行降维,通过SVM支持向量机交叉验证得到平均指标,来…...
AI 绘画Stable Diffusion 研究(二)sd模型ControlNet1.1 介绍与安装
部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好,我是风雨无阻。 众所周知,StableDiffusion 是非常强大的AI绘图工具,需要详细了解StableDiffusion的朋友,可查看我之前的这篇文章: …...
接口参数设计原则
1. 不能太动态. 不相信客户端的原则 例如传递 filterFields , 推送一个表的某些字段给上游. 2. 可以服务端提供一些封装. 这个封装可以是写死的组合, 也可以是后端配置的. 最好的是 代码里的领域类bean 1,1对应一个名称. 可以是 classReference. 运营态有很多字段是给用户看的…...
网络安全防护利器:SK5代理与IP代理的技术对比
一、IP代理与SK5代理技术简介 IP代理: IP代理是一种通过中间服务器转发网络请求的技术。用户通过向代理服务器发出请求,代理服务器转发请求至目标服务器,然后将目标服务器的响应返回给用户。主要功能包括隐藏真实IP地址、绕过地理限制和IP封锁…...
IDEA删除本地git仓库、创建本地git仓库、关联其他仓库并上传
IDEA删除本地git仓库、创建本地git仓库、关联其他仓库并上传 删除本地Git仓库 创建本地Git仓库 关联其他仓库并上传 要在IntelliJ IDEA中删除本地Git仓库并创建新的本地Git仓库,以及关联其他仓库并上传,请按照以下步骤进行操作: 删除本地G…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
