打包文件,无需提取即可读取

时间:2012-12-18 17:36:48

标签: c# zip dotnetzip sharpziplib system.io.packaging

在我目前的项目中,我正在处理大量文件(超过数十个文件,数量很少 - 介于1到30 KB之间),因为为我的客户复制它们的资源是耗时的工作。我正在寻找一种包装机制,可以帮助我将每个1000或10000个打包成一个文件,从而产生更多的复制速度,因为在这种情况下我处理的文件数量要少得多;并且从我的应用程序中读取它们不应该需要任何提取,也不需要压缩,而我正在编写或更改它们(因为应用程序的性能和性质是分布式的,并且资源在客户端之间共享),我已经搜索过了,我了解以下ZIP库:

  • SharpZipLib
  • DotNetZip
  • System.IO.Packaging程序

但似乎上面的库需要至少通过文件迭代来访问zip或包中的文件而不提取。我需要通过zip或包文件中的地址(文件夹结构层次结构)访问文件!以下链接是类似的问题,通过Iterating通过zip文件回答:

how-to-read-data-from-a-zip-file-without-having-to-unzip-the-entire-file

content-inside-zip-file

有没有人对此问题有任何想法或解决方案?

顺便说一下,我在C#编码,项目是基于窗体的。

1 个答案:

答案 0 :(得分:0)

我会做自己的包格式。使用GZipStream或其他东西。对于每个文件,在获得字节值后,使用GZipStream压缩它们,并且需要在包格式中创建包含每个文件(名称,起始位置和长度)的标头。在您的标题中包含此数据,这可能是在您的包的开头。您可以获取所需文件的信息,在查找压缩数据的位置后,您将获得具有指定长度的字节数组。

但是如果修改一个文件,则需要在修改后的文件后重新计算所有索引。