7z密码解密_一次关于7z的踩坑经历

本文讲述了作者在处理7z密码解密时遇到的挑战,包括无法获取解压进度和效率问题。作者尝试了多种方案,如通过tar、openssl和dd改进解压流程,以及直接修改7z源码。最终,作者发现7z缺少一个命令行参数导致无法获取解压进度,添加参数后问题得以解决。然而,过程中发现原始资源包存在大量冗余文件,压缩后大小大幅减小。
摘要由CSDN通过智能技术生成

 看文档一定要认真,不然你一定会后悔的!!!

这是作者纠结君的一次踩坑经历。

事情的过程有点复杂,容在下从头说起。 

缘起

话说N~久之前,纠结君的团队需要开发这样一个功能:

在 windows 操作系统的 nodejs 环境中解压一个 zip 文件,并在 nodejs 中实时获取解压进度。

对资源包的处理有如下需求:

  • 将所有资源打包成一个文件

  • 密码保护

原始资源的大小将近7G,包含的文件个数为19万,路径27万个,压缩过后的资源包大小超过了4G,所以使用7z作为解压工具。(7za是7z压缩和解压的核心,以下内容两个名词不做区别。)

这个功能是如此的 easy~ ,开发的小伙伴很快就开发完成,并进行提测了。

但是,测试小哥哥测试后说:前端进度卡在一个地方半个小时不动,这个程序肯定有 bug !

开发小伙伴弱弱地解释:这个么,你多等等就可以了。

果然,在测试小哥哥午觉醒来之后,解压成功。

但是,测试小哥哥依旧拒绝了上线请求,理由也很强大:你进度卡在那里,谁知道你后台是不是挂掉了?你还指望用户等你一个小时?

明明前端有进度条,为什么没有正常显示进度呢?

开发小伙伴说:后端拿不到7z解压进度,所以写了一个假的进度条。

对于这个理由,测试小哥哥表示理解,但对于上线依旧十动然拒。

58499c93ed9c58351d90e79b41de04f0.png

入坑

一周前,纠结君开始接手这个功能,力求让前端看到一个正常的进度。

纠结君首先尝试直接运行7z命令。发现在命令行最下方可以显示一个进度条。然后使用nodejs中的child_process.exec方法调用7z,发现在子进程的stdout中,确实获取不到这个进度条。

在查阅了7z的文档后,纠结君发现7z使用-so参数可以将解压结果输出到stdout。纠结君尝试了一下,这个输出确实可以使用nodejs获取到。

这个很不错啊,7z可以获取解压后的文件大小,把输出到控制台上的数据大小做累加,取这个累加值跟之前获取的文件大小的比值,这不就是解压进度吗?

但是,你以为这样就大功告成了吗?No, no, no!

如果你这么认为,你真是too young to simple!

程序运行完成后,在硬盘上根本找不到解压后的文件。

因为解压结果都被输出到控制台上了,根本没有写入硬盘!&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值