非常感谢! Matteo
是否可以在下载时提取单个文件?
可以的。 当不使用压缩时,您可以编写自己的程序来提取文件。(我知道有人编写了一个脚本,直接从外部rar文件中下载电影;但它不是公开的,我没有它。)因为您提到了Python,我建议您看看Marko Kreen的rarfile 2.2,就像pyarrfs的作者所做的那样。存档只是添加了标头(rar块)的文件切成的一份副本。这将是一个复制操作,您需要暂停,直到下载下一个存档。
我强烈相信对于压缩文件也是可能的。你在这里的方法将会不同,因为你必须使用unrar来提取压缩文件。我必须补充一点,The Unarchiver中还有一个免费的RARv3实现可以提取RAR文件。我认为(un)rar的这个参数将会使其成为可能:
-vp Pause before each volume
By default RAR asks for confirmation before creating
or unpacking next volume only for removable disks.
This switch forces RAR to ask such confirmation always.
It can be useful if disk space is limited and you wish
to copy each volume to another media immediately after
creation.
它将为您提供暂停提取的可能性,直到下载下一个存档。
我认为如果启用了“固实”选项创建rar,则这将无法正常工作。
当使用rars的固实选项时,所有打包文件都被视为一个大文件流。即使不包含要提取的文件,如果始终从第一个文件开始,这不应该会造成任何问题。 我还认为它可以处理有密码的存档。
我非常怀疑。根据我的理解,压缩的本质是每一位都需要用来解压缩。看起来你下载的源文件在压缩之前被故意分成了几部分,但是一旦你应用压缩,任何你压缩的东西现在都是一个原子单位。所以他们把整个avi文件好心地分成了几部分,但每个部分仍然是一个原子单元。
但是我不是压缩方面的专家。
我目前唯一能想到的测试是像这样做:curl http://example.com/Part01 | unrar
。
我不知道是否有特定编程语言的要求,但是可以直接从互联网流式传输压缩的RAR文件并动态解压缩。我可以使用我的C#库http://sharpcompress.codeplex.com/实现这一点。
RAR格式其实非常好用。它在每个条目之前都有标头,压缩数据本身不需要对字节流进行随机访问。
如果是多部分文件,则必须完全提取第1部分,然后在可用第2部分时继续写入。
我的RarReader API可以实现所有这些功能。实际上,固体存档也是可流式传输的(事实上,它们只能流式传输。您无法在固体存档中随机访问文件。基本上必须一次性将它们全部提取出来。)