读取zip文件而无需完全下载

时间:2010-07-15 17:52:02

标签: c# .net algorithm zip

是否可以在不完全下载的情况下读取.ZIP文件的内容?

我正在构建一个抓取工具,而不是只需要下载每个zip文件来索引其内容。

感谢;

4 个答案:

答案 0 :(得分:5)

棘手的部分是识别中心目录的开头,该目录发生在文件的末尾。由于每个条目都是相同的固定大小,因此您可以从文件末尾开始进行一种二进制搜索。二进制搜索试图猜测中心目录中有多少条目。从一些合理的值N开始,并在end-(N * sizeof(DirectoryEntry))检索文件的那一部分。如果该文件位置不以中心目录条目签名开头,则N太大 - 一半重复,否则,N太小,双重并重复。与二进制搜索一样,该过程保持当前的上限和下限。当两者相等时,您已找到N的值,即条目数。

您点击网络服务器的次数最多为16次,因为不超过64K条目。

这是否比下载整个文件更有效取决于文件大小。您可以在下载之前请求资源的大小,如果它小于给定的阈值,请下载整个资源。对于大型资源,如果阈值设置为高,请求多个偏移将更快,并且对网络服务器的总体负担更少。

HTTP / 1.1允许下载资源范围。对于HTTP / 1.0,您别无选择,只能下载整个文件。

答案 1 :(得分:2)

format表明关于文件中的内容的关键信息位于其末尾。然后将条目指定为该特定条目的偏移量,因此您需要访问我认为的全部内容。

GZip格式能够被视为我认为的流。

答案 2 :(得分:1)

我不知道这是否有帮助,因为我不是程序员。但在Outlook中,您可以预览zip文件并查看实际内容,而不仅仅是文件目录(如果它们是可预览的文档,如pdf)。

答案 3 :(得分:0)

ArchView中实现了一个解决方案 “ArchView可以在线打开存档文件而无需下载整个存档。” https://addons.mozilla.org/en-US/firefox/addon/5028/

在“archview.js”文件的archview-0.7.1.xpi中,您可以查看他们的javascript方法。