当前位置: 首页 > news >正文

使用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应用程序开发框架&#xff0c;其中提供了许多方便的类来处理文件和目录操作。其中&#xff0c;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算法的原理很简单。假设你有一堆点集&#xff0c;还有一个小的窗口&#xff0c;这个窗口可能是圆形的&#xff0c;现在你可能要移动这个窗口到点集密度最大的区域当中。 如下图&#xff1a; 最开始的窗口是蓝色圆环的区域&#xff0c;命名为C1。蓝…...

正交变换和仿射变换

正交变换和仿射变换 平面的正交变换 正交点变换&#xff08;保距变换&#xff09; 平面上的一个保持任意两点距离不变的点变换 平面正交变换性质 正交变换的乘积是正交变换恒等变换是正交变换正交变换将&#xff08;不&#xff09;共线的三点映射成&#xff08;不&#xff09…...

Electron 多端通信桥 MessageChannelMain和 MessagePortMain 坑点汇集

简介 MessageChannelMain 是 DOM MessageChannel 对象的主进程等价对象。 它的特有功能是创建一对已连接的 MessagePortMain 对象。 Electron 本身为了灵活追加 on("message") 机制&#xff0c;就说明该 MessageChannelMain 已经被创建了&#xff0c;而 Web 开发中&a…...

Html5播放器按钮在移动端变小的问题解决方法

Html5播放器按钮在移动端变小的问题解决方法 用手机浏览器打开酷播云视频&#xff0c;有时会出现播放器按钮太小的情况&#xff0c;此时只需在<head>中加入下面这段代码即可解决&#xff1a; <meta name"viewport" content"widthdevice-width, initia…...

Rust 开发环境搭建【一】

Rust 开发环境 推荐 搭建&#xff1a; 安装 rust 语言 以及 工具链 推荐安装方法&#xff1a;rustup curl --proto ‘https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh 在国内如果访问速度慢&#xff0c;可以使用清华大学提供的镜像服务&#xff1a; https://mirrors.tu…...

C# Blazor 学习笔记(3):路由管理

文章目录 前言路由管理App.razor设置登录页面设置空布局 前言 我们知道使用Blazor的官方模板&#xff0c;我们会自动得到一个拥有侧边栏的布局页面。但是我们发现我们所有新建的页面都有侧边栏。有时候我们需要跳出这个布局&#xff0c;比如我要做登录页面的时候&#xff0c;我…...

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)实现子传父。 众所周知&#xff0c;v-model是给input绑定&#xff0c;方便对表单的双向绑定。 其实&#xff0c;v-model是个语法糖&#xff0c;具体案例如下所示。 <input v-model"inputValue">相当于…...

【Web】web

dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层——传输层——网络层——数据链路层——物理层 每一定的台主机都有一个唯一且固定的地址标识——IP地址 IP地址的做用&#xff1a;1.区分用户和计算机&#xff1b;2.进行通信 IP地址由32位二进制数组成&#xff0c;…...

css中的bfc是什么?

什么bfc&#xff1f; BFC&#xff08;Block Formatting Context&#xff09;块级 格式化 上下文。 BFC就是页面上的一个隔离的独立盒子&#xff0c;容器里面的子元素和外面的元素不会相互影响。 为什么要bfc? bfc是我们去主动触发的,并不是自动就存在的,它是帮助我们解决cs…...

【前端知识】React 基础巩固(四十四)——其他Hooks(useContext、useReducer、useCallback)

React 基础巩固(四十四)——其他Hooks&#xff08;useContext、useReducer、useCallback&#xff09; 一、useContext的使用 在类组件开发时&#xff0c;我们通过 类名.contextType MyContext的方式&#xff0c;在类中获取context&#xff0c;多个Context或者在函数式组件中…...

华为云hcip核心知识笔记(数据库服务规划)

华为云hcip核心知识笔记&#xff08;数据库服务规划&#xff09; 1.云数据接库优势 1.1云数据库优点有&#xff1a; 易用性强&#xff1a;能欧快速部署和运行 高扩展&#xff1a;开放式架构和云计算存储分离 低成本&#xff1a;按需使用&#xff0c;成本更加低廉 2.云数据库r…...

【有趣的】关于Map的一些小测试

Map在代码中用到得非常多&#xff0c;它是无序的、key-value结构的&#xff0c;其读取会非常快。 今天看了个小文章Map判空 、空字符串、空key值等各种判断方法&#xff0c;你都掌握了吗&#xff1f;便自己也玩一下。 一、判空 因为对象已经new出来了&#xff0c;所以map指向的…...

【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC,拥挤距离与皮尔逊系数法结合实现回归与分类预测

【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC&#xff0c;拥挤距离与皮尔逊系数法结合实现回归与分类预测 思路 考虑拥挤距离指标与PCC皮尔逊相关系数法相结合&#xff0c;对回归或分类数据进行降维&#xff0c;通过SVM支持向量机交叉验证得到平均指标&#xff0c;来…...

AI 绘画Stable Diffusion 研究(二)sd模型ControlNet1.1 介绍与安装

部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好&#xff0c;我是风雨无阻。 众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;需要详细了解StableDiffusion的朋友&#xff0c;可查看我之前的这篇文章&#xff1a; …...

接口参数设计原则

1. 不能太动态. 不相信客户端的原则 例如传递 filterFields , 推送一个表的某些字段给上游. 2. 可以服务端提供一些封装. 这个封装可以是写死的组合, 也可以是后端配置的. 最好的是 代码里的领域类bean 1,1对应一个名称. 可以是 classReference. 运营态有很多字段是给用户看的…...

网络安全防护利器:SK5代理与IP代理的技术对比

一、IP代理与SK5代理技术简介 IP代理&#xff1a; IP代理是一种通过中间服务器转发网络请求的技术。用户通过向代理服务器发出请求&#xff0c;代理服务器转发请求至目标服务器&#xff0c;然后将目标服务器的响应返回给用户。主要功能包括隐藏真实IP地址、绕过地理限制和IP封锁…...

IDEA删除本地git仓库、创建本地git仓库、关联其他仓库并上传

IDEA删除本地git仓库、创建本地git仓库、关联其他仓库并上传 删除本地Git仓库 创建本地Git仓库 关联其他仓库并上传 要在IntelliJ IDEA中删除本地Git仓库并创建新的本地Git仓库&#xff0c;以及关联其他仓库并上传&#xff0c;请按照以下步骤进行操作&#xff1a; 删除本地G…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...