7

我正在寻找一种将特定文件从 rar 存档读取到内存中的方法。具体来说,它们是编号图像文件的集合(我正在写一个漫画阅读器)。虽然我可以简单地解压缩这些文件并根据需要加载它们(完成后删除它们),但如果可能的话,我宁愿避免这种情况。

综上所述,如果可能的话,我更喜欢跨平台(Windows/Linux)的解决方案,但 Linux 是必须的。同样重要的是,如果您要为我指出一个库来处理这个问题,请理解它必须是免费的(如啤酒)或 OSS。

4

7 回答 7

9

查看 rarfile 模块:

于 2009-07-27T00:54:58.740 回答
6

真正的答案是没有图书馆,而且你也做不到。您可以使用 rarfile,也可以使用 7zip unRAR(它比 7zip 免费,但仍然像啤酒一样免费),但这两种方法都需要外部可执行文件。RAR 的许可证基本上是这样要求的,因为你可以得到 unRAR 的源代码,但你不能以任何方式修改它,将它变成一个库将构成非法修改。

此外,无法随机访问可靠的 RAR 压缩文件(最好的压缩文件),因此无论如何您都必须解压缩整个文件。WinRAR 提供的 UI 似乎可以避免这种情况,但实际上它只是在后台解压缩和重新打包存档。

于 2009-07-27T01:11:12.210 回答
3

pyUnRAR2库可以将文件从 RAR 档案中提取到内存(如果需要,还可以提取到磁盘)。它在 MIT 许可下可用,并且在 Windows 上简单地包装了 UnRAR.dll,在 Unix 上简单地包装了 unrar。单击“QuickTutorial”查看使用示例。

在 Windows 上,它可以使用(包含的)UnRAR.dll 提取到内存(而不是磁盘),方法是使用 RARSetCallback() 设置回调,然后使用 RAR_TEST 选项而不是 RAR_EXTRACT 选项调用 RARProcessFile() 以避免提取任何文件到磁盘。然后回调监视 UCM_PROCESSDATA 事件以读取数据。从 UCM_PROCESSDATA 事件的文档中:“处理解压缩的数据。它可用于在提取或测试文件时读取文件,而无需实际将文件提取到磁盘。”

在 Unix 上,unrar 可以简单地将文件打印到 stdout,因此库只是从连接到 unrar 的 stdout 的管道中读取。您需要的 unrar 二进制文件是具有“将文件打印到标准输出”命令的“p”的那个。使用“apt-get install unrar”在 Ubuntu 上安装它。

于 2010-07-01T02:47:34.347 回答
2

rarsoft 对衍生作品的限制似乎是您不能使用 unrar 源代码来创建 RAR压缩算法的变体。从上下文来看,它似乎专门允许人们使用他的代码(修改或未修改)来解压缩文件,但如果您打算编写自己的压缩代码,则不能使用它们。这是我刚刚下载的 license.txt 文件的直接引用:

  1. UnRAR 源可以在任何软件中免费使用,不受限制地处理 RAR 存档,但不能用于重新创建专有的 RAR 压缩算法。允许以单独的形式或作为其他软件的一部分分发修改后的 UnRAR 源,前提是在文档和源注释中明确说明该代码不得用于开发 RAR (WinRAR) 兼容的存档器。

看到每个人似乎都想要一些能让他们编写能够处理从 CBR (rar) 文件读取图像的漫画查看器的东西,我不明白为什么人们认为有任何东西阻止他们使用提供的源代码。

于 2010-12-14T05:19:23.600 回答
1

RAR 是一种专有格式;我认为没有任何公共规范,因此第三方工具和库支持很差,甚至不存在。

使用 ZIP 会更好;它完全免费,具有准确的公共规范,压缩库随处可用(zlib 是世界上部署最广泛的库之一),并且非常容易编写代码。

http://docs.python.org/library/zipfile.html

于 2009-07-27T01:43:50.593 回答
0

查看 Python“结构”模块。然后,您可以直接在 Python 程序中解释 RAR 文件格式,允许您检索 RAR 中的内容,而无需依赖外部软件为您完成。

编辑:这当然是香草 Python - 有使用第三方模块的替代品(如已发布)。

编辑2:根据维基百科的文章,我的回答需要您获得作者的许可。

于 2009-07-27T00:55:33.250 回答
0

免费的7zip 库也能够处理 RAR 文件。

于 2009-07-27T00:58:02.673 回答