使用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…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
