SevenZip++显示当前压缩进度的范例

以前写7z压缩工具,直接调用命令行的话,因为无法提取命令行的压缩进度所以无法在界面上显示当前压缩进度,现在用SevenZip++,成功提取到了压缩到7z过程中的压缩进度,先在命令行中展示一下效果吧。

直接上代码,看着代码调试了一下,于是得到了如下关键代码:

class ArchiveUpdateCallbackEx : public ArchiveUpdateCallback
{
public:ArchiveUpdateCallbackEx(const TString& dirPrefix, const std::vector< FilePathInfo >& filePaths):ArchiveUpdateCallback(dirPrefix, filePaths){}// IProgressSTDMETHOD(SetTotal)(UInt64 size){m_size = size;return S_OK;}STDMETHOD(SetCompleted)(const UInt64* completeValue){m_completeValue = *completeValue;if (m_size){printf("%.2lf%%\r", m_completeValue * 1.0 / m_size * 100.0);}return S_OK;}// ICompressProgressInfoSTDMETHOD(SetRatioInfo)(const UInt64* inSize, const UInt64* outSize){return S_OK;}private:UInt64 m_size = 0;UInt64 m_completeValue = 0;
};

按照范例调用回调函数即可。

void SevenZipCompressor::CompressFilesToArchive( const TString& pathPrefix, const std::vector< FilePathInfo >& filePaths )
{std::cout << "正在压缩文件..." << std::endl;CComPtr< IOutArchive > archiver = GetArchiveWriter(m_library, m_compressionFormat);SetCompressionProperties( archiver );CComPtr< OutStreamWrapper > outFile = new OutStreamWrapper( OpenArchiveStream() );CComPtr< ArchiveUpdateCallback > callback = new ArchiveUpdateCallbackEx( pathPrefix, filePaths );HRESULT hr = archiver->UpdateItems( outFile, (UInt32) filePaths.size(), callback );if ( hr != S_OK ) // returning S_FALSE also indicates error{throw SevenZipException( GetCOMErrMsg( _T( "Create archive" ), hr ) );}std::cout << "压缩完成!" << std::endl;
}

至此,压缩7z终于可以正常获取进度了!而且调试代码发现,还可以获取当前的 已经压缩的大小和已经压缩后的大小。

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

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

相关文章

企业架构系列(19)TOGAF企业连续体和构建块

TOGAF 企业连续体&#xff08;Enterprise Continuum&#xff09;是一个用于对架构描述进行分类的框架。它有助于突出架构师在哪个抽象层次上工作&#xff0c;并概述了不同目的下应使用的不同层次。而构建块&#xff08;Building Blocks&#xff09;是用来描述这些架构和解决方案…

机器学习——自动化机器学习(AutoML)

机器学习——自动化机器学习&#xff08;AutoML&#xff09; 自动化机器学习&#xff08;AutoML&#xff09;——2024年的新趋势什么是AutoML&#xff1f;AutoML的关键组成部分AutoML的优势AutoML 实例&#xff1a;使用Auto-sklearn进行回归分析AutoML的应用领域2024年值得关注…

高效的读书与笔记管理:打造个人知识体系

01 读书学习的常见问题 1、读书⼯具分散&#xff0c;划线和笔记分散&#xff0c;导致我们的复习、搜索效率低。⽐如不同书籍中&#xff0c;提到了同⼀个问题的观点&#xff0c;很难进行关联。 2、读书&#xff0c;仅限于读&#xff0c;知道别⼈的观点&#xff0c;但是缺乏内…

【Qt】控件概述(3)—— 显示类控件

显示类控件 1. QLabel——标签1.1 setPixmap设置图片1.2 setAlignment设置文本对齐方式1.3 setWordWrap设置自动换行1.4 setIndent设置缩进1.5 setMargin设置边距1.6 body 2. QLCDNumber2.1 使用QTimer实现一个倒计时效果2.2 使用循环的方式实现倒计时 3. QProgressBar——进度…

商贸物流痛点解析

商贸物流痛点解析 在当今全球化的商业环境中&#xff0c;商贸与物流之间的紧密协作已成为业务成功的关键因素。然而&#xff0c;许多组织面临着信息不对称、资源配套不足以及系统间隔离等痛点&#xff0c;这些问题严重阻碍了商贸体系与物流、仓储和园区的有效联动&#xff0c;…

Linux高效查日志命令介绍

说明&#xff1a;之前介绍Linux补充命令时&#xff0c;有介绍使用tail、grep命令查日志&#xff1b; Linux命令补充 今天发现仅凭这两条命令不够&#xff0c;本文扩展介绍一下。 命令一&#xff1a;查看日志开头 head -n 行数 日志路径如下&#xff0c;可以查看程序启动是否…

数据库SQL基础教程(二)

目录 连接(JOIN) 语法&#xff1a; 不同的 SQL JOIN INNER JOIN 关键字 LEFT JOIN 关键字 SQL LEFT JOIN 语法 RIGHT JOIN 关键字 SQL RIGHT JOIN 语法 FULL OUTER JOIN 关键字 SQL FULL OUTER JOIN 语法 UNION 操作符 SQL UNION 语法 SQL UNION ALL 语法 SELECT I…

uniapp引入ThorUI的方法

1、下载文件 2、复制相应的文件除了pages 3、往项目中复制即可 4、引入即可实现 5、添加easycome自动引入

单片机(学习)2024.10.9

目录 汇编整体分类 1.指令 2.伪操作 3.伪指令 汇编代码 汇编初始化 数据搬运指令 算术运算指令 加法 减法 乘法 比较指令 跳转指令 逻辑运算指令 与或&#xff0c;异或 左移右移 内存操作 LOAD/STORE 指令 写 读 CPU的栈机制 栈的概念 栈的种类 1.空栈(…

Java生成Excel_低内存占用_更快

EasyExcel&#xff1a;高效Java Excel工具&#xff0c;解决大文件读写难题 EasyExcel是一个基于Java的、快速简洁且能有效解决大文件内存溢出问题的Excel处理工具。它使得用户可以在无需过多关注性能和内存消耗的情况下&#xff0c;轻松实现Excel文件的读写功能。相较于传统的…

无头浏览器测试:如何使用 Puppeteer 和 Browserless?

什么是无头浏览器测试&#xff1f; 无头浏览器测试通常指没有头的物体或东西&#xff0c;在浏览器的语境中&#xff0c;它指的是没有 UI 的浏览器模拟。无头浏览器自动化使用 Web 浏览器进行端到端测试&#xff0c;而无需加载浏览器的 UI。 无头模式是一个功能&#xff0c;它…

Canvas:AI协作的新维度

在人工智能的浪潮中&#xff0c;OpenAI的最新力作Canvas&#xff0c;不仅是一款新工具&#xff0c;它标志着人工智能协作方式的一次革命性飞跃。Canvas为写作和编程提供了一个全新的交互界面&#xff0c;让用户能够与ChatGPT进行更紧密、更直观的协作。 ​​​​​​​ Canvas的…

Android targetSdkVersion 升级为34 问题处理

原因是发布到GooglePlay遭到拒绝&#xff0c;需要最低API level为34。之前为31&#xff0c;感觉还挺高的&#xff0c;但是GooglePlay需要的更高。 记录下处理问题&#xff1a; 1.升级gradle版本为8.0.2 之前是&#xff1a; classpath com.android.tools.build:gradle:7.1.0-…

sql注入第8关

手工注入麻烦 目录 判断闭合方式 判断注入类型 手工注入 1、获取数据库名 2、爆破数据库的名字&#xff08;security&#xff09; 3、爆破表的数量 4、判断表名的长度 5、判断表的列名数量 6、判断表的列名的名字 7、获取表的数据 8、判断数据的长度 9、判断数据的…

Golang | Leetcode Golang题解之第464题我能赢吗

题目&#xff1a; 题解&#xff1a; func canIWin(maxChoosableInteger, desiredTotal int) bool {if (1maxChoosableInteger)*maxChoosableInteger/2 < desiredTotal {return false}dp : make([]int8, 1<<maxChoosableInteger)for i : range dp {dp[i] -1}var dfs …

点云深度学习模型PointNet

随着3D传感器&#xff08;如激光雷达、深度相机&#xff09;的广泛应用&#xff0c;点云数据已成为计算机视觉和机器人领域的重要数据形式。点云是一组在三维空间中具有 (x, y, z) 坐标的离散点的集合&#xff0c;用于表示物体的形状或场景。然而&#xff0c;由于点云的无序性、…

pycharm生成的exe执行后报错

元素 application 显示为元素 urn:schemas-microsoft-com:asm.v1^dependentAssembly (此版本的 Windows 不支持)的子元素。 日志名称: Application 来源: SideBySide 日期: 2024/10/8 14:14:12 事件 ID: 72 任务类别: 无 级别…

docker升级mysql

一、首选备份原数据库所有数据 二、在Docker中查看正在运行的MySQL容器名称&#xff0c;可以使用以下命令&#xff1a; docker ps --filter "namemysql" 三、查看当前docker中正在运行mysql的版本 docker exec -it qgz-mysql mysql -V 可以看到当前运行的版本是8.…

[C++]使用纯opencv部署yolov8-cls图像分类onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv8-cls图像分类ONNX模型涉及几个关键步骤。 首先&#xff0c;你需要将YOLOv8-cls模型从PyTorch格式转换为ONNX格式&#xff0c;这是为了确保模型在不同深度学习框架之间的互操作性。这个转换过程通常是通过ultralytics框架中的model.export…

大数据-158 Apache Kylin 安装配置详解 集群模式启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…