在Windows上,它可以使用(包含的)unrr.dll提取到内存(而不是磁盘),方法是使用RARSetCallback()设置回调,然后使用RAR_TEST选项而不是RAR_extract选项调用RARProcessFile(),以避免将任何文件提取到磁盘。然后,回调监视UCM_PROCESSDATA事件以读取数据。在UCM_Process data events的文档中:“处理解包的数据。它可用于在提取或测试文件时读取文件,而无需实际将文件提取到磁盘。”
在Unix上,unrr可以简单地将文件打印到stdout,因此库只从连接到unrr的stdout的管道中读取。您需要的unrr二进制文件是具有“p”for“Print file to stdout”命令的二进制文件。使用“apt get install unrr”在Ubuntu上安装它。
真正的答案是没有图书馆,你也做不到。您可以使用rarfile,也可以使用7zip unrr(它的可用空间小于7zip,但仍然像beer中那样是免费的),但是这两种方法都需要一个外部可执行文件。RAR的许可证基本上需要这样做,因为虽然您可以获得unrr的源代码,但是您不能以任何方式修改它,将其转换为库将构成非法修改。
另外,固体RAR档案(最好的压缩文件)不能随机访问,所以无论如何,您都必须将整个文件取消归档。WinRAR提供了一个似乎可以避免这种情况的UI,但实际上它只是在后台解包和重新打包归档文件。
pyUnRAR2库可以将RAR存档中的文件提取到内存(如果需要,还可以提取磁盘)。它在MIT许可下可用,只需在Windows上包装unrr.dll,在Unix上包装unrr。单击“QuickTutorial”查看用法示例。
在Windows上,它可以使用(包含的)unrr.dll提取到内存(而不是磁盘),方法是使用RARSetCallback()设置回调,然后使用RAR_TEST选项而不是RAR_extract选项调用RARProcessFile(),以避免将任何文件提取到磁盘。然后,回调监视UCM_PROCESSDATA事件以读取数据。在UCM_Process data events的文档中:“处理解包的数据。它可用于在提取或测试文件时读取文件,而无需实际将文件提取到磁盘。”
在Unix上,unrr可以简单地将文件打印到stdout,因此库只从连接到unrr的stdout的管道中读取。您需要的unrr二进制文件是具有“p”for“Print file to stdout”命令的二进制文件。使用“apt get install unrr”在Ubuntu上安装它。
请参阅rarfile模块:
http://grue.l-t.ee/~marko/src/rarfile/README.html相关问题 更多 >
编程相关推荐