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

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;
}

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

http://www.lryc.cn/news/511110.html

相关文章:

  • C# 超高速高性能写日志
  • 阿里云人工智能ACA(五)——深度学习基础
  • 入职体检尿潜血3+能通过吗,什么原因引起
  • vue最新源码探索分析
  • Kivy App开发之打包apk
  • 【Java 数据结构】LinkedList 类 和 模拟实现链表
  • VS2022 中的 /MT /MTd /MD /MDd 选项
  • 产品初探Devops!以及AI如何赋能Devops?
  • 两种不同的LuaBehaviour生命周期绑定
  • Effective C++ 条款31:将文件间的编译依存关系降至最低
  • python数据分析之爬虫基础:scrapy详解
  • openwrt 负载均衡方法 openwrt负载均衡本地源接口
  • Linux高级--3.3.2.6高并发编程之“内存屏障”“CPU屏障”“编译屏障”
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现
  • EMQX5.X版本性能配置调优参数
  • 电脑配置maven-3.6.1版本
  • 水电站视频智能监控系统方案设计与技术应用方案
  • React 组件通信完整指南 以及 自定义事件发布订阅系统
  • 华为 AI Agent:企业内部管理的智能变革引擎(11/30)
  • 【Pandas】pandas Series empty
  • Git如何设置和修改当前分支跟踪的上游分支
  • GitHub新手用法详解【适合新手入门-建议收藏!!!】
  • 游戏开发线性空间下PS工作流程
  • 7-10 最长公共子序列
  • 亚远景-ISO 21434标准下的汽车网络安全:风险评估与管理的关键实践
  • C++ 的 source_location
  • [python SQLAlchemy数据库操作入门]-14.实时数据采集 记录股市动态
  • `we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别
  • 【和春笋一起学C++】文本输入与读取
  • D类音频应用EMI管理