5、Qt—文件夹的使用小记1

开发平台:Win10 64位

开发环境:Qt Creator 13.0.0 

构建环境:Qt 5.15.2 +MSVC2019 64位

一、需求及涉及相关类

在开发过程中,或多或少的都会操作到文件,比如配置文件,日志等生成复制操作,在Qt中实现文件夹的操作(创建、复制、重命名、移除)的类主要是这三个:QDir、QFile、QFileInfo。

QDir主要是对文件夹的操作,新建个文件夹,删除个文件夹,判断文件夹存不存在等功能
QFile主要是对文件进行操作(读写),比如判断每个文本文件存不存在,船舰一个文本文件之类的功能。
QFileInfo兼顾文件夹和文件的操作,既可以实现QDir判断文件夹存不存在等操作,也可以实现QFile判断文件存不存在的操作。从名字上面也可以知道,它还提供了对文件的更详细的操作。

 本篇文章更多的是对文件夹的操作,后续会更新对文件(QFile)的操作。

二、QDir

QDir类主要用于对文件夹的操作,在文件系统的开发中用的比较对,比如我们在win10中常用的在某某盘创建个文件夹,复制某个文件夹到其他盘或者其他文件夹下。对于qt开发,上面这些操作都离不开QDir类。

QString QDir::path(); // 获取目录的路径QStringList QDir::entryList(); // 获取目录中条目的名称列表void QDir::setPath(const QString &path); // 给 QDir 设置一个新路径bool QDir::cd(const QString &dirName); // 进入到指定目录bool QDir::cdUp(); // 进入到父目录 cdUp() 等效于 cd("..")bool QFileInfo::exists(); // 测试指定目录是否存在bsolutePath(); // 获取目录的绝对路径QString QDir::dirName(); // 获取目录名,通常返回绝对路径中的最后一个元素;如果 QDir 代表当前目录,会返回“.”bool QDir::mkdir(const QString &dirName); // 创建一个目录bool QDir::rename(const QString &oldName, const QString &newName); // 重命名bool QDir::rmdir(const QString &dirName); // 删除目录(删除文件用 remove())isReadable(); // 测试目录的属性,是否可读isRoot(); // 测试目录的属性,是否是根目录void QDir::refresh(); // 重新读取目录的数据uint QDir::count(); // 返回目录中的所有条目数QFileInfoList QDir::entryInfoList(); // 获取一个 QFileInfo 对象的列表bool QDir::isRelative(); // 判断 QDir 是否使用相对路径bool QDir::isAbsolute(); // 判断 QDir 是否使用绝对路径bool QDir::makeAbsolute(); // 将一个相对路径转换为绝对路径

注意:filePath()及absoluteFilePath()来获得QDir中指定文件的路径名,但这两个函数均不检查指定的文件是否存在;

2.1 新建文件夹

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/********************///dirName:需要带路径,或者前面加一个/,如果只是111的化,没什么效果QString dirName="f://111";QString dirName="/111";//会生成在项目所在的磁盘的第一级目录下CreateFolder(dirName);/********************/
}//创建文件夹
void MainWindow::CreateFolder(QString folderPath)
{//创建文件夹QDir dir(folderPath);if (!dir.exists()){dir.mkdir(folderPath);}
}

2.2 复制文件夹中内容

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/********************/QString sourceDir="/111";QString desDir="/222";CreateFolder(sourceDir);copyFolder(sourceDir,desDir,true);/********************/}///将源文件夹中的内容复制到目标文件夹中,并不是把源文件一起复制过去,
///比如上面将111文件夹复制222文件夹,并不会在222文件夹下面出现111文件夹
///而是出现111文件夹中的东西
/// \brief MainWindow::copyFolder
/// \param fromDir--源目录
/// \param toDir--目标目录
/// \param coverFileIfExist--如果存在是否覆盖
/// \return bool
///
bool MainWindow::copyFolder(const QString &fromDir, const QString &toDir, bool coverFileIfExist)
{QDir sourceDir(fromDir);QDir targetDir(toDir);if (!targetDir.exists()){    //如果目标目录不存在,则进行创建if (!targetDir.mkdir(targetDir.absolutePath())) return false;}QFileInfoList fileInfoList = sourceDir.entryInfoList();foreach(QFileInfo fileInfo, fileInfoList){if (fileInfo.fileName() == "." || fileInfo.fileName() == "..") continue;if (fileInfo.isDir()){    // 当为目录时,递归的进行copyif (!copyFolder(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName()),coverFileIfExist))return false;}else{   //当允许覆盖操作时,将旧文件进行删除操作if (coverFileIfExist && targetDir.exists(fileInfo.fileName())){targetDir.remove(fileInfo.fileName());}// 进行文件拷贝if (!QFile::copy(fileInfo.filePath(), targetDir.filePath(fileInfo.fileName()))){return false;}}}return true;
}

2.3 重命名文件夹

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/********************/QString sourceDir="/111";QString desDir="/222";QString newDir="/1";CreateFolder(sourceDir);copyFolder(sourceDir,desDir,true);RenameFolder(sourceDir,newDir);/********************/}///
/// \brief MainWindow::RenameFolder
/// \param oldPath--原来文件夹路径
/// \param newPath--需要修改的文件夹路径,这个路径其实就是把最后一级换个名字
///
void MainWindow::RenameFolder(const QString oldPath, const QString newPath)
{//重命名文件夹QDir dirOld(oldPath);dirOld.rename(oldPath, newPath);
}

2.4 移除文件夹

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);/********************/QString sourceDir="/111";QString desDir="/222";QString newDir="/1";CreateFolder(sourceDir);copyFolder(sourceDir,desDir,true);RenameFolder(sourceDir,newDir);RemoveFolder(sourceDir);RemoveFolder(desDir);RemoveFolder(newDir);/********************/}/// \brief MainWindow::RemoveFolder
/// \param dirPath
///
void MainWindow::RemoveFolder(const QString dirPath)
{//移除文件夹QDir dirItem(dirPath);dirItem.removeRecursively();
}

注意:其中在文件夹及文件的操作中,要明确一些变量名,比如filename,或者filepath这种,其实只要明白,我们给文件夹及文件的参数是路径地址就可以。

三、参考文献

3.1 QT中QFile、QFileInfo、QDir的常用函数_qt qfileinfo函数-CSDN博客

3.2  QDir类及其用法总结-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP(12)--语言模型

前言 仅记录学习过程,有问题欢迎讨论 应用-语音识别: 声音的本质是一种波,将波按时间段切分为很多帧,之后进行声学特征提取,每一帧转化为向量。 应用-输入法: 按照语言模型给出概率最高的候选词 语言…

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024)

2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024) 会议简介 2024国际化学材料、清洁能源和生物技术大会(ICCMCEB2024)将在长沙隆重举行。本次会议旨在汇聚来自世界各地的化学材料、清洁能源和生物技术领域的专家学者,共同探…

用C++译密码

为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。字母…

【吃透Java手写】3-SpringBoot-简易版-源码解析

【吃透Java手写】SpringBoot-简易版-源码解析 1 SpringbootDemo2 准备工作2.1 Springboot-my2.1.1 依赖2.1.2 SpringBootApplication2.1.3 SJBSpringApplication2.1.3.1 run方法 2.2 Springboot-user2.2.1 依赖2.2.2 UserController2.2.3 UserApplication 2.3 分析run方法的逻辑…

Vue+OpenLayers7入门到实战:OpenLayers实现鼠标拖拽方式绘制矩形(正方形和长方形)

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上实现鼠标拖拽方式绘制矩形(拖拽方式长方形和正方形)。 OpenLayers本身是可以通过鼠标点击多个点的方式来绘制多边形的,当然也包括长方形和正方形,但是这种多边形绘…

Ollama + Openwebui 本地部署大型模型与交互式可视化聊天

Ollama简介 Ollama是一个创新的平台,它允许用户在本地启动并运行大型语言模型。它提供了一个简单易用的内容生成接口,类似于OpenAI,但无需开发经验即可直接与模型进行交互。Ollama支持热切换模型,为用户提供了灵活性和多样性。 …

港股开启估值修复行情 珠光效果材料龙头大涨25%

进入二季度以来,港股市场持续大涨,仅4月恒生指数就大涨7.4%,5月涨幅继续扩大至12.31%,大幅跑赢全球各主要指数。尤其是随着恒生科技多年以来的估值底部的确认,至此恒生指数、恒生港股通,恒生高股息&#xf…

使用C语言实现杨氏矩阵并找出数字

前言 过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!! 今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。 首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中…

概念解析 | ROC曲线:评估分类模型

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:ROC曲线的含义和绘制 概念解析 | ROC曲线:评估分类模型 第一部分:通俗解释 在我们的日常生活中,经常会遇到需要做出判断和选择的情况。比如,当你收到一封邮件时…

深度学习(算法工程师)最火的就业方向

自动驾驶与智能交通 自动驾驶是深度学习技术的一个重要应用领域,其目标是实现车辆的自主导航和驾驶。自动驾驶系统需要借助深度学习技术来识别交通信号、行人、车辆等环境信息,并做出相应的决策。因此,自动驾驶与智能交通领域的就业方向包括…

WPS二次开发系列:一文快速了解WPS SDK功能场景

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 SDK功能介绍 功能详解: 打开文档…

第十二届蓝桥杯省赛真题 Java B 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: ASC试题 B : 卡片试题 C: 直线试题 D: 货物摆放试题 E: 路径试题 F: 时间显示试题 G: 最少砝码试题 H: 杨辉三角形试题 I: 双向排序试题 J: 括号序列 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,…

echarts指标盘属性概括

echarts指标盘属性概括 代码 有模拟数据可以直接使用const options {animation: true,title: {top: "35%",left: "center",// text: "单元测试覆盖度", // 主标题itemGap: 15,textStyle: {// 主标题样式color: "#666666",fontSize:…

YOLOv5改进 | 独家创新篇 | 利用MobileNetV4的UIB模块二次创新C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用MobileNetV4的UIB模块二次创新C3,其中UIB模块来自2024.5月发布的MobileNetV4网络,其是一种高度优化的神经网络架构,专为移动设备设计。它最新的改动总结主要有两点,采用了通用反向瓶…

微同城小程序源码 轻松制作本地生活活动赚钱 带完整的安装代码包以及搭建教程

近年来,本地生活服务市场蓬勃发展,人们对于周边的生活信息、活动资讯等需求日益增长。然而,传统的信息发布方式存在诸多不便,如信息更新不及时、传播范围有限等。微同城小程序源码应运而生。它利用小程序的便捷性和普及性&#xf…

海睿思受邀参加 “走进中节能”研习交流,探索新能源数据治理的创新路径

近日,OceanMind海睿思参加由江苏省企业信息化协会(以下简称“苏信会”)主办的“走进中节能太阳能科技(镇江)有限公司”研习交流活动。 海睿思与苏美达、远东控股、隆基乐叶、固德威、上能电气等40多位来自制造业领域的…

04-25 周四 FastBuild重构实践-TLS、全局捕获异常、一键配置

04-25 周四 FastBuild重构实践 时间版本修改人描述04-25V0.1宋全恒新建文档2024年5月6日14:33:16V1.0宋全恒完成文档撰写 简介 由于 04-22 周日 阿里云-瑶光上部署FastBuild过程(配置TLS、自定义辅助命令)描述了重新部署一个FastBuild实例的过程,通过阅读这个&…

怎么设置付费视频课程_在线教育知识付费系统

在信息爆炸的时代,我们每天都被海量的信息包围。然而,真正有价值、能够让我们快速提升的知识,往往隐藏在这些信息的深海之中。今天,我要为大家介绍的,就是这样一份珍贵的宝藏——我们的付费视频课程。 工具/原料 微信…

手把手教你微调Stable Diffusion

温馨提示 关于本文: 本文你可以学习到完整的不使用webui借助lora和dreambooth微调Stable Diffusion的全过程。 手把手教你微调Stable Diffusion生成优弧,但是半失败版😂 关于训练: 单卡32GV100进行的微调,因为一些…

【leetcode】数学位数题总结

涉及题型:两数相加问题、大数溢出等 相加问题 根据题意定义rs的数据结构判断是存储方式是正序还是逆序,如果是正序需要反转 比如 123 12 135是正序, 321 21 135是逆序反转的方式:对于可以从后往前遍历的(如字符串…