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 ,所以应该不会太难,只是无奈没有文档(我可以看懂的)可以参考。。。
1
verrickt 2019-10-09 21:08:36 +08:00 via Android
一个思路,c#通过 pinvoke 去调 dll
|
2
1462326016 OP @verrickt 调用是没有问题的,问题就在于没有一个完整的示例或者文档可以参考,应该传入什么参数,调用哪个函数去要压缩或解压
|
3
est 2019-10-09 21:22:16 +08:00
感觉要构造很多 ctypes 不值得。。
|
4
Laforet 2019-10-09 21:29:28 +08:00 via Android
|
5
1462326016 OP @Laforet 好的,我看下,感谢。之前也考虑了 pylzma,但是后来看 pylzma 文档好像不支持加解密?因为需求中不仅要压缩解压,还有好多需要加密解密的文件。
|
6
1462326016 OP @est 没有办法,现在看来只有这样才能避免反复创建进程导致的性能损失。😢
|
7
TtiGeR 2019-10-09 21:38:45 +08:00 via iPhone
|
8
1462326016 OP @TtiGeR 😯感谢感谢,我看下。一直在 GitHub 搜 Python 调用方式,忘记搜 c#了。。失误失误。
|
9
est 2019-10-09 22:39:14 +08:00
|
10
1462326016 OP @est 我没有找到 7z.exe 连续输入输出的方法😥按理说每执行一次应该只能解压一个文件。
|
11
mmdsun 2019-10-10 08:14:42 +08:00 via Android
c#压缩,解压的库很多。去 NuGet 搜搜看。没必要用 7z 吧
|
12
1462326016 OP @mmdsun python 自带有 lzma 的库,但是我需要加解密的功能,所以自带的不满足要求。因为暂时不知道 7z 的加密原理,是先进行压缩再 AES 加密还是说先 AES 加密再压缩,或者是其他的流程。。
|
13
coder001 2020-12-03 06:19:00 +08:00 via Android
上古时期的 SevenZipSharp 应该还能再战吧…
|
14
1462326016 OP @coder001 应该是可用,只不过是 C#的,不是 python 。😂
|