Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用
关于Qt相关文件读写操作以及文件夹的一些知识,之前也写过一些博客:
Qt关于路径的处理(绝对路径、相对路径、路径拼接、工作目录、运行目录)_qt 相对路径-CSDN博客
C++/Qt 读写文件_qt c++ 读取文本文件-CSDN博客
C++/Qt读写ini文件_qt读取ini文件中对象-CSDN博客
C++/Qt读写xml文件_c++用qt库读取xml文件-CSDN博客
本文主要总结一下文件夹以及文件相关类的一些使用方法。
QDir
QDir类提供了对目录和路径的操作,包括创建、删除、遍历目录,以及获取目录信息等功能。
创建文件夹:
QDir dir("mydir");
if (!dir.exists()) QDir().mkdir(dir.absolutePath());
判断工作目录下是否存在一个名为“mydir”的如果不存在则创建,这其中就涉及到了QDir的三个方法:exist()(判断文件夹是否存在)、mkdir()(用于创建单个目录)、absolutePath()(文件的绝对路径)。
关于exist方法这里不多讲,mkdir创建单个目录的方法,如果上级目录不存在,则会创建失败,如果想要创建多级目录则必须使用mkpath,QDir().mkpath("1/2/2/3/mydir")。对应的删除方法则是rmkdir和rmkpath。
QDir获取对应文件夹路径的有三个方法:
QString absolutePath() const
QString canonicalPath() const
QString path() const
试着都打印一下:
QDir dir("mydir");
if (!dir.exists()) QDir().mkdir(dir.absolutePath());
qDebug() << "path=" << dir.path();
qDebug() << "absolutePath=" << dir.absolutePath();
qDebug() << "canonicalPath=" << dir.canonicalPath();
可以看到path只是单纯的文件夹名(与dirName相同),而absolutePath和canonicalPath似乎都是绝对路径,可以看一下Qt的官方文档对canonicalPath的定义:
canonical一词为规范,canonicalPath()方法返回目录的规范路径,会解析符号链接,返回一个规范化的路径。
可以使用cd进入对应目录以及cdUp退回上一级目录:
dir.mkdir("subdir");dir.cd("subdir");qDebug() << dir.dirName();dir.cdUp();qDebug() << dir.dirName();
获取目录下所有子目录以及文件:
QFileInfoList
entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QFileInfoList
entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QStringList
entryList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QStringList entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
前面两个方法和后面两个方法的区别是前者返回的类型是QFileInfo(具体在本文后面介绍QFileInfode的时候再说),后者则是直接返回对应文件路径。方法对应的三个参数分别是:nameFilters(文件名过滤),filters(文件类型过滤),sort(排序方式)。
QDir dir(QCoreApplication::applicationDirPath());if (!dir.exists()) QDir().mkdir(dir.absolutePath());dir.cdUp();foreach (const QString &file,dir.entryList({"*.cpp"}, QDir::Files, QDir::Size)) {qDebug() << file;}
获取对应目录下所有子目录以及文件,然后过滤后缀名为cpp以及只显示纯文件类型,并且按照文件大小排序,编译运行查看打印:

QFile
QFile文件类相对于QFileInfo文件信息类,则只关注文件的一些具体操作,比如打开进行读写操作、复制、重命名、删除:

注意moveToTrash就是将文件移入回收站,这个方法是Qt5.15之后才有的。
QFileInfo
QFileInfo作为文件信息类提供了对文件和目录信息的访问和查询功能。上文说到的QDir的两个方法就是将对应目录下的子目录和文件以QFileInfo的形式返回
QFileInfoList
entryInfoList(const QStringList &nameFilters, QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
QFileInfoList
entryInfoList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
1. 构造:
QFileInfo(const QFileInfo &fileinfo)
QFileInfo(const QDir &dir, const QString &file)
QFileInfo(const QFile &file)
QFileInfo(const QString &file)
可以通过文件名、QFile类对象、QDir文件目录对象加目录下的对应路径构造。
也就是说QFile和QFileInfo是可以相互转换的。
2. 获取文件信息:
QDir dir(dirName);foreach (const QFileInfo &info,dir.entryInfoList({}, QDir::Files, QDir::Size)) {//输出文件名以及路径相关qDebug() << "--------------------fileName:" << info.fileName()<< "----------------------";qDebug() << "filePath:" << info.filePath();qDebug() << "absolutePath:" << info.absolutePath();//文件所在目录的绝对路径qDebug() << "absoluteFilePath:" << info.absoluteFilePath();//文件的绝对路径qDebug() << "canonicalPath:" << info.canonicalPath();//文件规范路径qDebug() << "baseName:" << info.baseName(); //前缀qDebug() << "completeBaseName:"<< info.completeBaseName(); //完全前缀,类似1.tar.gz这种qDebug() << "suffix:" << info.suffix(); //后缀qDebug() << "completeSuffix:"<< info.completeSuffix(); //完全后缀,类似1.tar.gz这种//输出文件时间相关qDebug() << "birthTime:"<< info.birthTime().toString("yyyy/MM/dd hh:mm:ss.zzz"); //创建时间qDebug() << "lastRead:"<< info.lastRead().toString("yyyy/MM/dd hh:mm:ss.zzz"); //最后一次访问时间qDebug() << "lastModified:"<< info.lastModified().toString("yyyy/MM/dd hh:mm:ss.zzz"); //最好一次修改时间//输出文件大小qDebug() << "size:" << info.size();//单位字节Byte}
选择一个文件夹进行打印输出其中文件信息:

--------------------fileName: "dirtest.pdb" ----------------------
filePath: "G:/qtprojects/dirtest/debug/dirtest.pdb"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/dirtest.pdb"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "dirtest"
completeBaseName: "dirtest"
suffix: "pdb"
completeSuffix: "pdb"
birthTime: "2024/03/17 11:24:11.882"
lastRead: "2024/03/17 14:46:48.111"
lastModified: "2024/03/17 14:46:48.111"
size: 2969600
--------------------fileName: "dirtest.vc.pdb" ----------------------
filePath: "G:/qtprojects/dirtest/debug/dirtest.vc.pdb"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/dirtest.vc.pdb"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "dirtest"
completeBaseName: "dirtest.vc"
suffix: "pdb"
completeSuffix: "vc.pdb"
birthTime: "2024/03/17 11:24:09.965"
lastRead: "2024/03/17 14:46:47.589"
lastModified: "2024/03/17 14:46:47.589"
size: 1519616
--------------------fileName: "dirtest.ilk" ----------------------
filePath: "G:/qtprojects/dirtest/debug/dirtest.ilk"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/dirtest.ilk"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "dirtest"
completeBaseName: "dirtest"
suffix: "ilk"
completeSuffix: "ilk"
birthTime: "2024/03/17 14:46:47.932"
lastRead: "2024/03/17 14:46:48.126"
lastModified: "2024/03/17 14:46:48.126"
size: 1334024
--------------------fileName: "mainwindow.obj" ----------------------
filePath: "G:/qtprojects/dirtest/debug/mainwindow.obj"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/mainwindow.obj"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "mainwindow"
completeBaseName: "mainwindow"
suffix: "obj"
completeSuffix: "obj"
birthTime: "2024/03/17 11:24:11.595"
lastRead: "2024/03/17 14:46:47.834"
lastModified: "2024/03/17 14:46:47.834"
size: 230172
--------------------fileName: "dirtest.exe" ----------------------
filePath: "G:/qtprojects/dirtest/debug/dirtest.exe"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/dirtest.exe"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "dirtest"
completeBaseName: "dirtest"
suffix: "exe"
completeSuffix: "exe"
birthTime: "2024/03/17 11:24:11.881"
lastRead: "2024/03/17 14:46:48.061"
lastModified: "2024/03/17 14:46:48.061"
size: 98304
--------------------fileName: "main.obj" ----------------------
filePath: "G:/qtprojects/dirtest/debug/main.obj"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/main.obj"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "main"
completeBaseName: "main"
suffix: "obj"
completeSuffix: "obj"
birthTime: "2024/03/17 11:24:11.511"
lastRead: "2024/03/17 14:41:19.559"
lastModified: "2024/03/17 14:41:19.559"
size: 94348
--------------------fileName: "moc_mainwindow.obj" ----------------------
filePath: "G:/qtprojects/dirtest/debug/moc_mainwindow.obj"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/moc_mainwindow.obj"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "moc_mainwindow"
completeBaseName: "moc_mainwindow"
suffix: "obj"
completeSuffix: "obj"
birthTime: "2024/03/17 11:24:11.507"
lastRead: "2024/03/17 14:41:19.549"
lastModified: "2024/03/17 14:41:19.549"
size: 89332
--------------------fileName: "moc_mainwindow.cpp" ----------------------
filePath: "G:/qtprojects/dirtest/debug/moc_mainwindow.cpp"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/moc_mainwindow.cpp"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "moc_mainwindow"
completeBaseName: "moc_mainwindow"
suffix: "cpp"
completeSuffix: "cpp"
birthTime: "2024/03/17 11:24:09.846"
lastRead: "2024/03/17 14:41:17.072"
lastModified: "2024/03/17 14:41:17.072"
size: 3580
--------------------fileName: "moc_predefs.h" ----------------------
filePath: "G:/qtprojects/dirtest/debug/moc_predefs.h"
absolutePath: "G:/qtprojects/dirtest/debug"
absoluteFilePath: "G:/qtprojects/dirtest/debug/moc_predefs.h"
canonicalPath: "G:/qtprojects/dirtest/debug"
baseName: "moc_predefs"
completeBaseName: "moc_predefs"
suffix: "h"
completeSuffix: "h"
birthTime: "2024/03/17 11:24:09.378"
lastRead: "2024/03/17 14:41:16.826"
lastModified: "2024/03/17 11:24:09.445"
size: 245
注意birthTime这个方法是Qt5.10之后才有的,如果是老版本Qt则使用created方法获取文件创建时间。
QFileDialog
QFileDialog类是Qt中用于打开和保存文件对话框的类。它提供了用户界面,允许用户选择文件或目录,并返回所选文件的路径。
打开文件对话窗口并选择一个文件:
static QString getOpenFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options());
第一个参数是窗体父指针,第二个参数是对话框标题,第三个参数是对话框打开的初始路径,第四个参数是文件过滤器,第五个参数是用于存储用户选择的过滤器的指针。当用户选择文件后,将存储所选文件类型的过滤器,第六个参数配置文件对话框的行为。可以使用QFileDialog::Option枚举值来设置不同的选项,例如QFileDialog::DontUseNativeDialog等。
例如从工作目录打开文件夹对话框选中一个后缀为cpp或h的文件
QString filePath = QFileDialog::getOpenFileName(nullptr, "Open File",QCoreApplication::applicationDirPath(), "Code Files (*.h *.cpp)");

如若要选择多个文件则方法为:
static QStringList getOpenFileNames(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options());
打开文件夹对话框并选择一个文件夹:
static QString getExistingDirectory(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
Options options = ShowDirsOnly);
对应参数就不过多介绍了。
相关文章:
Qt文件以及文件夹相关类(QDir、QFile、QFileInfo)的使用
关于Qt相关文件读写操作以及文件夹的一些知识,之前也写过一些博客: Qt关于路径的处理(绝对路径、相对路径、路径拼接、工作目录、运行目录)_qt 相对路径-CSDN博客 C/Qt 读写文件_qt c 读取文本文件-CSDN博客 C/Qt读写ini文件_…...
ChatGPT编程实现简易聊天工具
ChatGPT编程实现简易聊天工具 今天借助[[小蜜蜂]][https://zglg.work]网站的ChatGPT练习socket编程,实现一个简易聊天工具软件。 环境:Pycharm 2021 系统:Mac OS 向ChatGPT输入如下内容: ChatGPT收到后,根据返回结…...
C#-用于Excel处理的程序集
在.NET开发中,处理Excel文件是一项常见的任务,而有一些优秀的Excel处理包可以帮助开发人员轻松地进行Excel文件的读写、操作和生成。本文介绍了NPOI、EPPlus和Spire.XLS这三个常用的.NET Excel处理包,分别详细介绍了它们的特点、示例代码以及…...
HTTPS基础
目录 HTTPS简介 HTTP与HTTPS的区别 CA证书 案例 服务器生成私钥与证书 查看证书和私钥存放路径 Cockpit(图像化服务管理工具) HTTPS简介 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密&…...
【Flink SQL】Flink SQL 基础概念(四):SQL 的时间属性
《Flink SQL 基础概念》系列,共包含以下 5 篇文章: Flink SQL 基础概念(一):SQL & Table 运行环境、基本概念及常用 APIFlink SQL 基础概念(二):数据类型Flink SQL 基础概念&am…...
文字弹性跳动CSS3代码
文字弹性跳动CSS3代码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 下载地址 文字弹性跳动CSS3代码...
前端小白的学习之路(事件流)
提示:事件捕获,事件冒泡,事件委托 目录 事件模型(DOM事件流) 1.事件是什么 2.事件流 1).事件流的三个阶段 3.参考代码 二、事件委托 1.概念 2.使用案例 3.阻止冒泡行为 事件模型(DOM事件流) 1.事件是什么 1). 事件是HTML和Javascr…...
电脑文件误删除如何恢复?分享三个简单数据恢复方法
在日常使用电脑的过程中,文件误删除的情况时有发生。无论是由于操作失误还是病毒感染,丢失的文件都可能对我们的工作和学习造成极大的影响。因此,掌握文件恢复的方法显得尤为重要。下面围绕“电脑文件误删除如何恢复”这一主题,给…...
MySQL实战:监控
监控指标 性能类指标 名称说明QPS数据库每秒处理的请求数量TPS数据库每秒处理的事务数量并发数数据库实例当前并行处理的会话数量连接数连接到数据库会话的数量缓存命中率Innodb的缓存命中率 功能类指标 名称说明可用性数据库是否正常对外提供服务阻塞当前是否有阻塞的会话…...
MySQL自增主键自动生成的主键重置
需求描述: 从主键1开始,insert操作自增了五个,库里五条数主键是1、2、3、4、5; 然后把主键是3、4、5的三条数据给删了,再继续insert,主键就是6了 因为这里表会把最大的数即5记住,下次自增即为…...
reverse_iterator实现
对于实现reverse_iterator,我们可以学栈和队列的实现过程,利用适配器,实现如下; #pragma oncetemplate<class Iterator,class Ref,class Ptr> class reverse_Iterator { public://构造函数:reverse_Iterator(Iterator it):…...
C++:什么情况下函数应该声明为纯虚函数
在C中,函数应该在以下情况下声明为纯虚函数: 抽象基类:当你希望定义一个基类,该基类不能被实例化,只能作为其他类的基类时,你应该在基类中声明至少一个纯虚函数。这样的基类被称为抽象基类。纯虚函数通过在…...
【全面了解自然语言处理三大特征提取器】RNN(LSTM)、transformer(注意力机制)、CNN
目录 一 、RNN1.RNN单个cell的结构2.RNN工作原理3.RNN优缺点 二、LSTM1.LSTM单个cell的结构2. LSTM工作原理 三、transformer1 Encoder(1)position encoding(2)multi-head-attention(3)add&norm 残差链…...
区块链推广海外市场怎么做,CloudNEO服务商免费为您定制个性化营销方案
随着区块链技术的不断发展和应用场景的扩大,区块链项目希望能够进入海外市场并取得成功已成为越来越多公司的目标之一。然而,要在海外市场推广区块链项目,需要采取有效的营销策略和措施。作为您的区块链项目营销服务商,CloudNEO将…...
【S5PV210】 | ARM的指令集合
【S5PV210】 | ARM的指令集合 时间:2024年3月17日23:32:06 目录 文章目录 【S5PV210】 | ARM的指令集合目录 ARM指令集具有一系列显著的特点。首先,它属于RISC(精简指令集计算机)架构,这意味着译码机制相对简单。在AR…...
2024-3-17Go语言入门
在Go语言中: var a chan int 定义了一个名为 a 的变量,其类型为 chan int。这意味着 a 是一个整型值的通道(channel)。通道是Go语言中用于goroutine之间通信的一种机制,你可以通过通道发送和接收特定类型的值。在这个例…...
AJAX-XMLHttpRequest
XMLHttpRequest 定义: XMLHttpRequest对象用于与服务器交互。通过XMLHttpRequest可以在不断刷新页面的情况下请求特定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。 关系: axios内部采用XMLHttpReques…...
【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析
说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...
论文阅读_时序模型_iTransformer
1 2 3 4 5 6 7 8英文名称: ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING 中文名称: ITRANSFORMER:倒置Transformers在时间序列预测中的有效性 链接: https://openreview.net/forum?idX6ZmOsTYVs 代码: https://github.com/thum…...
Docker 哲学 - 容器操作 -cp
1、拷贝 容器绑定的 volume的 数据,到指定目录 2、匿名挂载 volume 只定义一个数据咋在容器内的path,docker自动生成一个 sha256 的key作为 volume 名字。这个 sha256 跟 commitID 一致都是唯一的所以 ,docker利用这个机制,可以…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
