Qt下使用7Z源码进行压缩和解压缩

7Z压缩是一款常用的压缩算法和工具,本文主要介绍一款在qt环境下进行编译的压缩方法。

本人测试是可以正常跑通的,具体代码部分请下载:下载链接,提取码:ev9t

7z源码网址:7-Zip

7z简介:

7z 是一种全新的压缩格式,它拥有极高的压缩比。

7z 格式的主要特征:

  • 开放的结构
  • 高压缩比
  • 强大的 AES-256 加密
  • 能够兼容任意压缩、转换、加密算法
  • 最高支持 16000000000 GB 的文件压缩
  • 以 Unicode 为标准的文件名
  • 支持固实压缩
  • 支持文件头压缩

7z 已公开了结构编辑功能,所以它可以支持任何一种新的压缩算法。到目前为止,下列压缩算法已被整合到了 7z 中:

本文分享的代码具备直接调用7z源码进行操作,具有较高的学习价值。

//列出文件
void MainWindow::on_pushButton_2_clicked()
{Q7z::initSevenZ();const QString path = "E:/ProjectTest/QT/LZMA/lz.7z";QFile file(path);file.open(QIODevice::ReadOnly);QVector<Q7z::File> files = Q7z::listArchive(&file);for(int i =0;i<files.count();i++){Q7z::File file = files.at(i);qDebug()<<file.path;}
}

QVector<File> listArchive(QFileDevice *archive)
{Q7Z_ASSERTS(archive, Readable)const qint64 initialPos = archive->pos();try {CCodecs codecs;if (codecs.Load() != S_OK)throw SevenZipException(QCoreApplication::translate("Q7z", "Cannot load codecs."));COpenOptions op;op.codecs = &codecs;CObjectVector<COpenType> types;op.types = &types;  // Empty, because we use a stream.CIntVector excluded;op.excludedFormats = &excluded;const CMyComPtr<IInStream> stream = new QIODeviceInStream(archive);op.stream = stream; // CMyComPtr is needed, otherwise it crashes in OpenStream().CObjectVector<CProperty> properties;op.props = &properties;CArchiveLink archiveLink;if (archiveLink.Open2(op, nullptr) != S_OK) {throw SevenZipException(QCoreApplication::translate("Q7z","Cannot open archive \"%1\".").arg(archive->fileName()));}QVector<File> flat;for (unsigned i = 0; i < archiveLink.Arcs.Size(); ++i) {IInArchive *const arch = archiveLink.Arcs[i].Archive;UInt32 numItems = 0;if (arch->GetNumberOfItems(&numItems) != S_OK) {throw SevenZipException(QCoreApplication::translate("Q7z","Cannot retrieve number of items in archive."));}flat.reserve(flat.size() + numItems);for (uint item = 0; item < numItems; ++item) {UString s;if (archiveLink.Arcs[i].GetItemPath(item, s) != S_OK) {throw SevenZipException(QCoreApplication::translate("Q7z","Cannot retrieve path of archive item \"%1\".").arg(item));}File f;f.archiveIndex.setX(i);f.archiveIndex.setY(item);f.path = UString2QString(s).replace(QLatin1Char('\\'), QLatin1Char('/'));Archive_IsItem_Folder(arch, item, f.isDirectory);f.permissions = getPermissions(arch, item, nullptr);getDateTimeProperty(arch, item, kpidMTime, &(f.utcTime));f.uncompressedSize = getUInt64Property(arch, item, kpidSize, 0);f.compressedSize = getUInt64Property(arch, item, kpidPackSize, 0);flat.append(f);}}return flat;} catch (const char *err) {archive->seek(initialPos);throw SevenZipException(err);} catch (const SevenZipException &e) {archive->seek(initialPos);throw e; // re-throw unmodified} catch (...) {archive->seek(initialPos);throw SevenZipException(QCoreApplication::translate("Q7z","Unknown exception caught (%1).").arg(QString::fromLatin1(Q_FUNC_INFO)));}return QVector<File>(); // never reached
}

链接: https://pan.baidu.com/s/15VldB4LMVgl3XbOabGZ-og 提取码: ev9t

请按需提取

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

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

相关文章

Python多线程并不是真的并行执行

Python多线程虽然能够利用多个CPU核执行计算&#xff0c;但并不能真正执行多线程并行计算。因为在Python中&#xff0c;有一个全局解释锁&#xff08;GlobalInterpreter Lock&#xff0c;GIL&#xff09;&#xff0c;该锁的存在使得在同一个时间只有一个线程执行任务&#xff0…

rocketmq dashboard控制台中topic状态无法展示

现象 在使用rocketmq控制台查看topic状态和订阅状态时&#xff0c;出现错误和没有信息的情况。 原因 rocketmq控制台版本问题&#xff0c;最新版本为1.0.1&#xff0c;支持rocketmq5版本&#xff0c;如果使用rocketmq4版本的服务无法兼容对应的数据。同理1.0.0版本也无法兼容ro…

Spark AQE 导致的 Driver OOM问题

背景 最近在做Spark 3.1 升级 Spark 3.5的过程中&#xff0c;遇到了一批SQL在运行的过程中 Driver OOM的情况&#xff0c;排查到是AQE开启导致的问题&#xff0c;再次分析记录一下&#xff0c;顺便了解一下Spark中指标的事件处理情况 结论 SQLAppStatusListener 类在内存中存…

Hadoop之路---伪分布式环境搭建

hadoop更适合在liunx环境下运行&#xff0c;会节省后期很多麻烦&#xff0c;而用虚拟器就太占主机内存了&#xff0c;因此后面我们将把hadoop安装到wsl后进行学习,后续学习的环境是Ubuntu-16.04 &#xff08;windows上如何安装wsl&#xff09; 千万强调&#xff0c;创建完hado…

20240427-线程基础-结束线程

线程基础-结束线程 1.stop()方法 略 2.使用共享变量 package com.ysf.day0427;public class Tst03ShareVar {static volatile boolean flag true;public static void main(String[] args) throws InterruptedException {Thread t new Thread(()->{while (flag){//处理…

读天才与算法:人脑与AI的数学思维笔记14_人脑的极限

1. 数学研究 1.1. 数学研究变得更为艰难了 1.1.1. 学科分支越发密集&#xff0c;问题越发复杂 1.1.2. 攻读博士学位的3年时间&#xff0c;只够去理解导师所给题目的含义 1.1.3. 随后&#xff0c;再花费数年时间去研究、探索&#xff0c;运气不错的话&#xff0c;会得到一些…

CVE-2022-2602:unix_gc 错误释放 io_uring 注册的文件从而导致的 file UAF

前言 复现该漏洞只是为了学习相关知识&#xff0c;在这里仅仅做简单记录下 exp&#xff0c;关于漏洞的详细内容请参考其他文章&#xff0c;最后在 v5.18.19 内核版本上复现成功&#xff0c;v6.0.2 复现失败 漏洞利用 diff --git a/include/linux/skbuff.h b/include/linux/s…

10GMAC层设计系列-(1)10G Ethernet PCS/PMA

一、引言 对于10G以太网MAC层的实现&#xff0c;Xilinx提供了 3种IP核&#xff0c;分别是 10G Ethernet MAC、10G Ethernet PCS/PMA、10G Ethernet Subsystem。 10G Ethernet MAC只包含MAC层&#xff0c;外部需要提供一个PHY芯片进行数据对齐&#xff0c;10G Ethernet MAC与P…

软考 系统架构设计师系列知识点之软件可靠性基础知识(7)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之软件可靠性基础知识&#xff08;6&#xff09; 所属章节&#xff1a; 第9章. 软件可靠性基础知识 第1节 软件可靠性基本概念 9.1.5 广义的可靠性测试和狭义的可靠性测试 广义软件可靠性测试 广义的软件可靠性测试是…

sql注入工具-​sqlmap

介绍&#xff1a; sqlmap是一款开源的自动化SQL注入工具&#xff0c;用于自动化检测和利用Web应用程序中的SQL注入漏洞。它具有强大的参数化查询和自定义注入脚本的功能&#xff0c;可以通过检测和利用SQL注入漏洞来获取数据库的敏感信息&#xff0c;如用户名、密码和其他重要…

C++ | Leetcode C++题解之第60题排列序列

题目&#xff1a; 题解&#xff1a; class Solution { public:string getPermutation(int n, int k) {vector<int> factorial(n);factorial[0] 1;for (int i 1; i < n; i) {factorial[i] factorial[i - 1] * i;}--k;string ans;vector<int> valid(n 1, 1);…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

Python内置函数issubclass()详解

在Python中&#xff0c;issubclass()函数是一个用于检查一个类是否是另一个类的子类的内置函数。这个函数在处理类的继承关系时非常有用。 函数定义 issubclass()函数的基本语法如下&#xff1a; issubclass(class, classinfo)class&#xff1a;要检查的类。classinfo&#…

WebGL/Cesium 大空间相机抖动 RTE(Relative to Eye)实现原理简析

在浏览器中渲染大尺寸 3D 模型&#xff1a;Speckle 处理空间抖动的方法 WebGL/Cesium 大空间相机抖动 RTE(Relative to Eye)实现原理简析 注: 相机空间和视图空间 概念等效混用 1、实现的关键代码 const material new THREE.RawShaderMaterial({uniforms: {cameraPostion: {…

使用hutool工具导入excel Java

Hutool是一个Java工具类库&#xff0c;它提供了一系列实用的API&#xff0c;包括操作Excel的功能。要使用Hutool导入Excel&#xff0c;你可以使用ExcelReader类。以下是一个简单的例子&#xff0c;展示了如何使用Hutool导入Excel文件&#xff1a; import cn.hutool.poi.excel.…

【全开源】Java上门老人护理老人上门服务类型系统小程序APP源码

功能&#xff1a; 服务分类与选择&#xff1a;系统提供详细的老人护理服务分类&#xff0c;包括日常照护、康复训练、医疗护理等&#xff0c;用户可以根据老人的需求选择合适的服务项目。预约与订单管理&#xff1a;用户可以通过系统预约护理服务&#xff0c;并查看订单详情&a…

final原理

文章目录 1. 设置 final 变量的原理2. 获取 final 变量的原理 1. 设置 final 变量的原理 理解了 volatile 原理&#xff0c;再对比 final 的实现就比较简单了 public class TestFinal {final int a 20; }字节码 0: aload_0 1: invokespecial #1 // Method java/lang/Object…

Linux:使用ssl加密网站为https

Linux&#xff1a;使用ssl加密网站为https 生成对应的数字证书以及密钥 [rootserver100 ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/nginx/certs/timinglee.org.key -x509 -days 365 -out /etc/nginx/certs/timinglee.org.crt......*...................…

Python进阶之-traceback详解

✨前言&#xff1a; 在日常开发中&#xff0c;我们会做一些基本的异常处理&#xff0c;但是有时候只能打印我们处理的结果或者将异常打印出来&#xff0c;不能直观的知道在哪个文件中的哪一行出错。在Python中&#xff0c;traceback是一个用来跟踪异常错误信息的标准库&#x…

无人机证书的含金量

无人机证书的含金量主要取决于以下几个因素&#xff1a; 1. 颁发机构&#xff1a;不同的机构颁发的无人机证书可能有不同的认可度。一些知名的无人机制造商、行业协会或政府机构颁发的证书通常具有较高的含金量&#xff0c;因为这些机构通常具备较高的权威性和专业性。 2. 培…