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利用这个机制,可以…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
