当前位置: 首页 > news >正文

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

相关文章:

  • Java中的并行计算与任务分发策略
  • 阿里云智能编程助手的安装使用
  • zoom 会议视频软件的使用
  • MySQL内存使用率高且不释放问题排查与总结
  • 黑马点评项目难点-动态代理,sychronized,@Transactional失效的情况
  • JAVA小知识31:多线程篇2
  • 1-Pandas是什么
  • Perl 语言开发(四):条件语句
  • python学习-基础1
  • JSON字符串中获取一个指定字段的值
  • 第1章 人工智能的基础概念与应用导论
  • C++ 定长队列的实现
  • 【博士每天一篇文献-综述】A survey on few-shot class-incremental learning
  • 【已解决】: fatal error: cuda_runtime_api.h: No such file or directory
  • 行业洞察 | 2024应用程序安全领域现状报告
  • 【技术性】Search知识
  • avalon2.2的VM生成过程
  • C++类中的特殊成员函数
  • Computed property XXX was assigned to but it has no setter
  • conda常用的命令
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • markdown编辑器简评
  • React的组件模式
  • 每天一个设计模式之命令模式
  • 排序算法之--选择排序
  • 判断客户端类型,Android,iOS,PC
  • 前端路由实现-history
  • 说说动画卡顿的解决方案
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​Linux·i2c驱动架构​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (7)STL算法之交换赋值
  • (C#)获取字符编码的类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (solr系列:一)使用tomcat部署solr服务
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (推荐)叮当——中文语音对话机器人
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)WLAN定义和基本架构转
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)为C# Windows服务添加安装程序
  • (轉)JSON.stringify 语法实例讲解
  • .Net 4.0并行库实用性演练
  • .NET Core 2.1路线图
  • .NET Core 中的路径问题
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 药厂业务系统 CPU爆高分析
  • .NET 指南:抽象化实现的基类
  • .Net的C#语言取月份数值对应的MonthName值
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]