Qt 使用 QZipReader 解压文件

头图

Qt 使用 QZipReader 解压文件

文章目录

  • Qt 使用 QZipReader 解压文件
    • 摘要
    • 关于 QZipReader
    • 使用 QZipReader
      • 代码解释:
    • 快速解 extractAll

关键字: QtQZipReaderextractAllZip解压缩

摘要

每日一坑,坑坑难过,今日在拉取上级给我的压缩包是发现总是解压有问题,总是无法完全解压,最后发现是上级的压缩文件中多了文件夹递归的情况,所以在本地进行模拟,发现可以解压,但是上级给我的就是加压不了,可以用标准的压缩工具可以解压缩,最后发现是上级在压缩的时候没有对应的目录信息,标准压缩工具是带有目录的信息,所以保险起见,我对每个文件做了取路径处理。

关于 QZipReader

QZipReader 并不是 Qt 官方提供的类,而是一个常见的第三方库或自定义实用类,用于读取和解压缩 ZIP 文件。

使用 QZipReader

以下是一个假设的 QZipReader 使用示例,包括如何解压包含文件夹的 ZIP 包:

假设 QZipReader 是一个自定义类(或第三方库)用于读取 ZIP 文件,以下代码示例展示如何使用 QZipReader 类解压包含文件夹的 ZIP 包:

#include <QCoreApplication>
#include <QDir>
#include <QFile>
#include <QDebug>// 头文件可能在不同的路径,确保包含正确的头文件
#include "QZipReader.h" bool extractAllFiles(const QString &zipFilePath, const QString &destPath) {QZipReader zipReader(zipFilePath);if (!zipReader.exists()) {qWarning() << "Zip file does not exist:" << zipFilePath;return false;}QDir dir(destPath);if (!dir.exists()) {if (!dir.mkpath(destPath)) {qWarning() << "Could not create directory:" << destPath;return false;}}foreach (const QZipReader::FileInfo &fileInfo, zipReader.fileInfoList()) {QString filePath = destPath + "/" + fileInfo.filePath;QFileInfo fileInfoObj(filePath);if (fileInfo.isDir) {if (!dir.mkpath(filePath)) {qWarning() << "Could not create directory:" << filePath;return false;}} else {QFile file(filePath);if (!file.open(QIODevice::WriteOnly)) {qWarning() << "Could not open file for writing:" << filePath;return false;}QByteArray data = zipReader.fileData(fileInfo.filePath);file.write(data);file.close();}}zipReader.close();return true;
}int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);QString zipFilePath = "path/to/your/zipfile.zip";QString destPath = "path/to/extract/directory";if (extractAllFiles(zipFilePath, destPath)) {qDebug() << "Extraction successful!";} else {qDebug() << "Extraction failed!";}return app.exec();
}

代码解释:

  1. 初始化 QZipReader

    • QZipReader zipReader(zipFilePath):创建一个 QZipReader 实例,并指定要解压的 ZIP 文件路径。
    • zipReader.exists():检查 ZIP 文件是否存在。
  2. 创建目标目录

    • QDir dir(destPath):创建一个 QDir 实例,用于表示解压的目标路径。
    • dir.mkpath(destPath):如果目标路径不存在,则创建它。
  3. 遍历 ZIP 文件中的每个文件

    • zipReader.fileInfoList():获取 ZIP 文件中所有文件信息的列表。
    • foreach (const QZipReader::FileInfo &fileInfo, zipReader.fileInfoList()):遍历每个文件信息。
    • fileInfo.filePath:获取文件路径。
    • fileInfo.isDir:判断文件是否是目录。
  4. 处理文件和目录

    • QFileInfo fileInfoObj(filePath):创建 QFileInfo 对象以获取文件信息。
    • 如果是目录,则使用 dir.mkpath(filePath) 创建目录。
    • 如果是文件,则创建 QFile 对象并打开,以写模式写入数据。
    • zipReader.fileData(fileInfo.filePath):读取 ZIP 文件中对应文件的数据,并写入解压路径中的文件。
  5. 关闭 ZIP 文件

    • zipReader.close():关闭 ZIP 文件。

确保你包含了 QZipReader 的正确头文件,并且你的项目中已正确链接了相应的库。如果 QZipReader 是你自己的类,请根据你的实现来调整代码。

快速解 extractAll

如果可以确定文件是标准压缩文件,就可以使用快速解extractAll。


博客签名2021

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

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

相关文章

2024年度 | 推荐PC端时间规划、项目管理软件(最新)

PingCode&#xff1a;适用于IT团队的项目/任务管理。 https://pingcode.com/ Worktile&#xff1a;团队通用的任务规划工具。 https://worktile.com/ Todoist&#xff1a;个人任务管理工具&#xff0c;支持跨平台同步。 Todoist | 管理您工作和生活的To Do List Pomodoro Ti…

Android选择题界面的设计——线性布局实操

目录 任务目标任务分析任务实施 任务目标 使用TextView、Button、CheckBox等实现一个选择题界面&#xff0c;界面如图1所示。 图1 选择题界面效果图 任务分析 上述界面可以分解为上下两部分&#xff0c;上面部分可以使用横向的线性布局来完成&#xff0c;下面部分可以使用…

独家带你get懂印尼直播工具APP借助海外快手kwai短视频广告推广优势

独家带你get懂印尼直播工具APP借助海外快手kwai短视频广告推广优势 随着全球互联网的迅猛发展和移动互联网的普及&#xff0c;广告投放已经成为企业扩大品牌影响力、获取潜在客户的重要手段之一。在印尼这一充满活力的市场中&#xff0c;直播工具APP的广告投放尤为关键。海外快…

快速了解 | 企业代码签名证书怎么弄

企业代码签名证书是用于签名软件、驱动程序、代码库等的数字证书&#xff0c;它能够保证软件的完整性和来源的真实性&#xff0c;从而提升用户对软件的信任度&#xff0c;消除电脑系统对于“未知发布者”软件的安装拦截和弹窗警告&#xff0c;消除微软的SmartScreen提醒。 1、…

ArmPiPro-多人同时开发

V0.0 2024.07.04 ROS节点间的通信是分布式的&#xff0c;也就是节点可以运行在不同的”主机“上&#xff0c;这些主机包括安装在机器人上的主控&#xff08;Pi4&#xff09;、通过串口连接PI4的烧写有Serialros的MCU从控、负责视觉开发的VM1、负责移动的VM2、负责机械臂的VM3都…

【自适应滤波系列四】回声消除(Acoustic Echo Cancellation, AEC)信号模型及其本质

什么是回声 关于回声的产生与传播,凌逆战(https://www.cnblogs.com/LXP-Never)大佬在其博客中阐述得很详细,可以去看他的博客,下面部分图片来源于其博客 回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声。一些回声是必要的,比如剧院里的音乐回声…

海豚调度监控:新增依赖缺失巡检,上游改动再也不用担心了!

&#x1f4a1; 本系列文章是 DolphinScheduler 由浅入深的教程&#xff0c;涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。 祝开卷有益:) 用过 DolphinScheduler 的小伙伴应该都知道&#xff0c;Dolphin…

代理IP和VPN有什么区别?该怎么选择?

今天我们来聊聊很多人关心的一个问题——代理IP和VPN到底有什么区别&#xff1f;虽然它们听起来差不多&#xff0c;但其实有很大的不同。这篇文章&#xff0c;小编就带大家一起了解一下吧&#xff01; 什么是代理IP&#xff1f; 代理IP是一种通过代理服务器替换用户真实IP地址…

第3章.中央服务器的物联网模式--AI/ML集成

第3章.中央服务器的物联网模式 本章列出了由于存储和/或计算需求而部署在中央服务器上以及部署在边缘&#xff08;本地&#xff09;或云上的体系结构模式。 这些模式基于现场设备生成的数据提供见解&#xff0c;使用附加数据&#xff08;来自附加系统&#xff0c;如企业系统&am…

【数据结构】建堆的时间复杂度

一.向下调整建堆 1.二叉树层数与总节点个数关系 层数一定时&#xff0c;在二叉树节点个数最大的情况下&#xff0c;二叉树为满二叉树&#xff0c;如下图所示&#xff0c;可以清晰地看到在满二叉树中第h层有2^(h-1)个节点&#xff0c;总节点N就等于一个等比数列的求和&#xf…

6.基于SpringBoot的SSMP整合案例-业务层开发

目录 1.业务层标准开发 1.1接口定义 1.2实现类定义 1.3测试类定义 1.4小结&#xff1a; 2.业务层快速开发 2.1使用MyBatisP1us提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl),t> 接口定义&#xff1a; 实现类定义&#xff1a; 测试类&#xff1a; …

AI绘画Stable Diffusion 超高分辨率扩图教程:ControlNet组件-Tile妙用,增强细节保持构图完整!

大家好&#xff0c;我是向阳 今天给大家分享如何用AI绘画工具Stable Diffusion 的 ControlNet Tile工具应用。ControlNet Tile模型能够在SD绘图过程中&#xff0c;实现高分辨率下实现高清扩图&#xff0c;并且避免出现图像分身现象&#xff0c;以及可以调整SD扩散生产过程噪声…

Unity射击游戏开发教程:(29)躲避敌人的子弹射击

在这篇文章中,我将介绍如何创建一个可以使玩家火力无效的敌人。创建的行为如下...... 当玩家向敌人开火时,敌人会向左或向右移动。向左或向右的移动是随机选择的,并在一段时间后停止敌人的移动。如果敌人移出屏幕,它就会绕到另一边。将一个精灵拖到画布上,将其缩小以匹配游…

代码随想录-二叉搜索树①

目录 二叉搜索树的定义 700. 二叉搜索树中的搜索 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 98. 验证二叉搜索树 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 530. 二叉搜索树的最小绝对差 题目描述&#x…

Nature:使用语义熵检测大语言模型中的幻觉

使用语义熵检测大语言模型中的幻觉 Detecting hallucinations in large language models using semantic entropy 论文阅读摘要研究目标论文图表概述总结关键解决方案语义熵计算:虚构内容检测: 双向蕴涵在大语言模型中的应用上下文的重要性蕴涵估计器 实验设计语义熵计算步骤结…

文献解读-基准与方法研究-第十五期|《不同 DNA 测序平台的标准化比较》

关键词&#xff1a;基准与方法研究&#xff1b;基因测序&#xff1b;结构变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Standardized Comparison of Different DNA Sequencing Platforms标题&#xff08;中文&#xff09;&#xff1a;不同 DNA…

【规范】Git分支管理,看看我司是咋整的

前言 &#x1f34a;缘由 Git分支管理好&#xff0c;走到哪里都是宝 &#x1f3c0;事情起因&#xff1a; 最近翻看博客中小伙伴评论时&#xff0c;发现文章【规范】看看人家Git提交描述&#xff0c;那叫一个规矩一条回复&#xff1a; 本狗亲测在我司中使用规范的好处&#xf…

windows电脑如何使用计划任务定时重启电脑

下面是亲测可用。 1.windows设置-搜索控制面板-系统和安全-管理工具–计划任务 这时候开始创建计划任务了 1.创建基本任务 2.填写名称&#xff08;这里根据需要自己填写&#xff09; 2.触发器里选择&#xff1a;每日&#xff0c;下一步 3.修改时间&#xff0c;然后点击下…

解密智慧校园学工管理系统的学生机构功能

智慧校园学工管理系统中的“学生机构”功能&#xff0c;是专为促进学生组织高效运作和校园文化繁荣而设计的一套数字化管理工具。它从多个维度出发&#xff0c;全面覆盖学生组织的生命周期管理&#xff0c;确保学生自治能力和校园活力得到显著提升。 首先&#xff0c;这一功能支…

构造函数深入理解

目录 构造函数构造函数体赋值初始化列表初始化列表格式初始化列表的意义以及注意点const修饰的成员变量初始化对象成员具体初始化的地方缺省值存在的意义例子1例子2 初始化与赋值引用成员变量的初始化注意点1注意点2我的疑惑 自定义类型成员初始化例子1例子2例子3例子4 初始化列…