C#/ Python 调用 7z.dll 加解密方法,不使用 exe 调用

2019-10-09 20:47:39 +08:00
 1462326016

7z.exe 调用的就是 7z.dll ,而且 7z.dll 包含了所有的压缩解压方式。

一个可行的方案就是通过 shell 的方式调用 7z.exe ,间接去调用 7z.dll 。但是现在有一个大量小文件的压缩解压需求,这种方案的话会频繁的创建进程( 7z.exe )和销毁进程,性能损失太大了,部分文件还需要加密和解密。

所以想问下有没有人知道怎么调用 7z.dll 直接进行压缩和解压(加密和解密)。

我知道 7z 是开源的,官方也给了 SDK,但是无奈不会 C++,而且官方给的 SDK 看了半天也没有什么头绪。

下午的时候搜了搜,找到两个项目也没用上。https://github.com/fancycode/pylzma https://github.com/harvimt/pylib7zip ( 6 年前的项目了,python3.3 )

因为好多游戏下载网站上都是将游戏数据包压缩存放,然后通过一个 exe 来解压释放的,其中 exe 就调用了 7z.dll ,所以应该不会太难,只是无奈没有文档(我可以看懂的)可以参考。。。

15035 次点击
所在节点    C#
14 条回复
verrickt
2019-10-09 21:08:36 +08:00
一个思路,c#通过 pinvoke 去调 dll
1462326016
2019-10-09 21:14:59 +08:00
@verrickt 调用是没有问题的,问题就在于没有一个完整的示例或者文档可以参考,应该传入什么参数,调用哪个函数去要压缩或解压
est
2019-10-09 21:22:16 +08:00
感觉要构造很多 ctypes 不值得。。
Laforet
2019-10-09 21:29:28 +08:00
https://github.com/dsoprea/PyEasyArchive

参考一下这个项目,其实你说的需求 pylzma 就能做到,没必要头铁去自己调用外部库
1462326016
2019-10-09 21:36:01 +08:00
@Laforet 好的,我看下,感谢。之前也考虑了 pylzma,但是后来看 pylzma 文档好像不支持加解密?因为需求中不仅要压缩解压,还有好多需要加密解密的文件。
1462326016
2019-10-09 21:37:15 +08:00
@est 没有办法,现在看来只有这样才能避免反复创建进程导致的性能损失。😢
TtiGeR
2019-10-09 21:38:45 +08:00
C#的 Wrapper 一搜就有的嘛

https://github.com/adoconnection/SevenZipExtractor

我记得 NuGet 应该也有 7z.Lib 之类的
1462326016
2019-10-09 21:56:30 +08:00
@TtiGeR 😯感谢感谢,我看下。一直在 GitHub 搜 Python 调用方式,忘记搜 c#了。。失误失误。
est
2019-10-09 22:39:14 +08:00
@1462326016 可以提前把进程 spawn 出来,stdin 给挂起,然后数据来了直接开始解压。

类似连接池。
1462326016
2019-10-09 23:04:34 +08:00
@est 我没有找到 7z.exe 连续输入输出的方法😥按理说每执行一次应该只能解压一个文件。
mmdsun
2019-10-10 08:14:42 +08:00
c#压缩,解压的库很多。去 NuGet 搜搜看。没必要用 7z 吧
1462326016
2019-10-10 09:13:01 +08:00
@mmdsun python 自带有 lzma 的库,但是我需要加解密的功能,所以自带的不满足要求。因为暂时不知道 7z 的加密原理,是先进行压缩再 AES 加密还是说先 AES 加密再压缩,或者是其他的流程。。
coder001
2020-12-03 06:19:00 +08:00
上古时期的 SevenZipSharp 应该还能再战吧…
1462326016
2020-12-03 10:17:06 +08:00
@coder001 应该是可用,只不过是 C#的,不是 python 。😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX