qt QZipReader详解
1、概述
QZipReader
是 Qt 中用于从 .zip
文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader
,你可以以编程方式读取 .zip
文件中的内容,并提取它们到目标目录中。
QZipReader
需要与 QFile
一起使用,通常你首先打开一个 .zip
文件,然后通过 QZipReader
对象访问其中的文件和目录。
QZipReader类位于QtGui模块的private部分,因此在使用时需要在项目的.pro文件中添加QT += gui-private
。
特点:
- 只支持解压
.zip
格式的压缩文件。 - 支持从
.zip
文件中读取文件内容。 - 提供了方便的 API 来访问压缩包中的各个文件。
2、重要方法
QZipReader
的常用方法如下:
-
QZipReader::QZipReader(const QString &fileName)
- 构造函数,通过文件路径打开
.zip
文件。 - 参数:
fileName
-.zip
文件的路径。 - 返回值: 无
- 构造函数,通过文件路径打开
-
bool QZipReader::isReadable() const
- 判断
.zip
文件是否可读取。如果.zip
文件有效且可以读取,则返回true
,否则返回false
。 - 返回值:
bool
- 如果文件可读取返回true
,否则返回false
。
- 判断
-
QStringList QZipReader::fileNames() const
- 获取压缩包中所有文件的文件名列表。返回一个包含压缩包中文件名称的字符串列表。
- 返回值:
QStringList
- 文件名列表。
-
QByteArray QZipReader::read(const QString &fileName)
- 读取指定文件的内容。通过此方法,可以直接读取压缩包内文件的内容,而无需将其解压到磁盘。
- 参数:
fileName
- 压缩包中的文件名。 - 返回值:
QByteArray
- 文件内容的字节数组。
-
bool QZipReader::extractTo(const QString &dir)
- 将
.zip
文件中的所有内容提取到指定目录。该方法会解压压缩包中的所有文件到目标文件夹。 - 参数:
dir
- 目标文件夹路径。 - 返回值:
bool
- 如果解压成功返回true
,否则返回false
。
- 将
-
bool QZipReader::extract(const QString &fileName, const QString &dir)
- 解压指定文件到目标目录。
- 参数:
fileName
- 需要解压的文件名。 - 参数:
dir
- 解压文件的目标路径。 - 返回值:
bool
- 如果解压成功返回true
,否则返回false
。
-
void QZipReader::close()
- 关闭
.zip
文件。 - 返回值: 无
- 关闭
void extractZip(const QString& zipFilePath, const QString& outputDirPath) {// 打开ZIP文件QFile zipFile(zipFilePath);if (!zipFile.open(QIODevice::ReadOnly)) {qWarning() << "无法打开ZIP文件:" << zipFilePath;return;}// 创建QZipReader对象QZipReader zipReader(&zipFile);if (!zipReader.isReadable()) {qWarning() << "无法读取ZIP文件:" << zipFilePath;return;}// 创建输出目录QDir outputDir(outputDirPath);if (!outputDir.exists()) {outputDir.mkpath(".");}// 获取ZIP文件中的文件信息并解压const QVector<QZipReader::FileInfo> fileInfoList = zipReader.fileInfoList();for (const QZipReader::FileInfo& fileInfo : fileInfoList) {if (fileInfo.isFile) {// 提取文件QString filePath = outputDirPath + "/" + fileInfo.filePath;QFileInfo info(filePath);QDir dir(info.absoluteDir());if(!dir.exists()){dir.mkpath(info.absoluteDir().path());}QFile outFile(filePath);if (outFile.open(QIODevice::WriteOnly)) {outFile.write(zipReader.fileData(fileInfo.filePath));outFile.close();qDebug() << "解压文件:" << filePath;} else {qWarning() << "无法创建文件:" << filePath;}} else if (fileInfo.isDir) {// 创建目录QDir().mkpath(outputDirPath + "/" + fileInfo.filePath);qDebug() << "创建目录:" << outputDirPath + "/" + fileInfo.filePath;}}
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);QString outputDirPath = "D:/";QString zipFilePath = "D:/gui/Qt.zip"; extractZip(zipFilePath, outputDirPath);return 0;
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!
相关文章:

qt QZipReader详解
1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…...

C# 超高速高性能写日志
原理 使用列队先缓存到内存,独立线程从列队中使用log4net写到磁盘上。 日志写入列队 public void EnqueueMessage(string message, FlashLogLevel level, Exception ex null) {if ((level FlashLogLevel.Debug && _log.IsDebugEnabled)|| (level Flas…...

阿里云人工智能ACA(五)——深度学习基础
一、深度学习概述 1. 深度学习概念 1-1. 深度学习基本概念 深度学习是机器学习的一个分支基于人工神经网络(模仿人脑结构)通过多层网络自动学习特征能够处理复杂的模式识别问题 1-2. 深度学习的优点与缺点 优点 强大的特征学习能力可以处理复杂问题…...

入职体检尿潜血3+能通过吗,什么原因引起
在许多行业入职体检中,尿液检测是一个重要的组成部分。尿潜血(也称为尿中血红蛋白)是尿液常规检查中一种常见的指标,其结果可以反映出身体的健康状况。当检测结果为“尿潜血3”时,很多人会感到困惑,尤其是在…...
vue最新源码探索分析
我在github上fork了最新版本vue3.5版本的源码并做了大幅删除,保留最核心的代码,有兴趣的可以看看,欢迎大家提出PR 仓库地址 https://github.com/greatanimalion/core 本项目vue版本3.5.13 为了方便查看与分析,减少心智负担 已…...
Kivy App开发之打包apk
Kivy项目可以为windows,max os,安卓,IOS等平台创建运行python的程序包。本文介绍如何将程序打包成apk并在安卓系统上安卓运行。 打包apk的方法主要有三种 使用Kivy Launcher,添加项目文件夹(必须包含main.py文件和android.txt文件),启动Kivy Launcher后就会运行,要生成a…...

【Java 数据结构】LinkedList 类 和 模拟实现链表
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 什么是 LinkedList ? 2 LinkedList 的使用 2.1 LinkedList 的构造 2.2 LinkedList 的常用方法 2.3 LinkedList 的遍历 3. 单链表的模拟实现…...

VS2022 中的 /MT /MTd /MD /MDd 选项
我们有时编译时,需要配置这个 运行库,指定C/C++运行时库的链接方式。 如下图 那么这些选项的含义是什么? /MT:静态链接多线程库 /MT选项代表“Multi-threaded Static”,即多线程静态库。选择此选项时,编译器会从运行时库中选择多线程静态连接库来解释程序中的代码,…...

产品初探Devops!以及AI如何赋能Devops?
DevOps源自Development(开发)和Operations(运维)的组合,是一种新的软件工程理念,旨在打破传统软件工程方法中“开发->测试->运维”的割裂模式,强调端到端高效一致的交付流程,实…...

两种不同的LuaBehaviour生命周期绑定
在学习xLua时,发现xLua和LoxodonFramework的LuaBehaviour稍微有些不同,其中一个点是在调用DoString方法时的区别 1. xLua的版本中 直接使用Lua脚本环境进行绑定,这时候的Lua脚本调用生命周期函数是这样的 直接在Lua脚本中写函数就行 2. Lo…...
Effective C++ 条款31:将文件间的编译依存关系降至最低
文章目录 条款31:将文件间的编译依存关系降至最低最小化编译依赖关系的最佳实践通过减少编译依赖的好处总结 条款31:将文件间的编译依存关系降至最低 为了减少编译依赖关系,应该将接口与实现分离,并尽量减少头文件之间的依赖。这…...

python数据分析之爬虫基础:scrapy详解
一、爬虫工程化 在之前的爬虫学习中基本已经掌握了爬虫这门技术的大多数技术点,但是我们现在写的代码还很流程化,很难进行商用,想要爬虫达到商用级别,必须要对我们现在编写的爬虫进行大刀阔斧式的重组,以达到工程化的…...

openwrt 负载均衡方法 openwrt负载均衡本地源接口
openwrt 负载均衡方法 openwrt负载均衡本地源接口_mob6454cc647bdb的技术博客_51CTO博客 本人注重原理分析,要求对其原理掌握,否则按教程操作,你怕是什么都学不会,仔细看,认真记比较好。 首先确认一下基本细节 1、路由…...
Linux高级--3.3.2.6高并发编程之“内存屏障”“CPU屏障”“编译屏障”
一、内存屏障 在 Linux C 语言编程 中,内存屏障(Memory Barrier) 是一种用于控制内存访问顺序的技术。它主要用于多处理器系统中,确保某些操作按预期顺序执行,避免 CPU 和编译器对内存访问进行优化,从而影…...

【含开题报告+文档+PPT+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现
开题报告 在全球范围内,安全与急救知识的普及已成为提升公众安全素养、减少意外伤害发生率、提高突发事件应对能力的重要举措。尤其是在当今社会,人们面临的生活、工作环境日益复杂,交通事故、火灾、溺水、突发疾病等各种意外事件的发生概率…...

EMQX5.X版本性能配置调优参数
EMQX 主配置文件为 emqx.conf,根据安装方式其所在位置有所不同: 安装方式配置文件所在位置DEB 或 RPM 包安装/etc/emqx/emqx.confDocker 容器/opt/emqx/etc/emqx.conf解压缩包安装./etc/emqx.conf EMQ X 消息服务器默认占用的 TCP 端口包括: 端口 说明…...

电脑配置maven-3.6.1版本
不要使用太高的版本。 apache-maven-3.6.1-bin.zip 下载这个的maven压缩包 使用3.6.1版本。 解压缩放在本地软甲目录下面: 配置系统环境变量 在系统环境下面配置MAVEN_HOME 点击path 新增一条 在cmd中输入 mvn -v 检查maven的版本 配置阿里云镜像和本地的仓库 …...

水电站视频智能监控系统方案设计与技术应用方案
一、背景需求 水电站作为国家重要的能源基地,其安全运行对于保障能源供应和社会稳定具有重要意义。然而,传统的人工监控方式存在着诸多问题,如人力成本高、监控范围有限、反应不及时等。因此,水电站急需引进一种先进的视频智能监控…...
React 组件通信完整指南 以及 自定义事件发布订阅系统
React 组件通信完整指南 1. 父子组件通信 1.1 父组件向子组件传递数据 // 父组件 function ParentComponent() {const [data, setData] useState(Hello from parent);return <ChildComponent message{data} />; }// 子组件 function ChildComponent({ message }) {re…...

华为 AI Agent:企业内部管理的智能变革引擎(11/30)
一、华为 AI Agent 引领企业管理新潮流 在当今数字化飞速发展的时代,企业内部管理的高效性与智能化成为了决定企业竞争力的关键因素。华为,作为全球领先的科技巨头,其 AI Agent 技术在企业内部管理中的应用正掀起一场全新的变革浪潮。 AI Ag…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...