C# 打包要读取而无需提取的文件

C# 打包要读取而无需提取的文件,c#,zip,dotnetzip,sharpziplib,system.io.packaging,C#,Zip,Dotnetzip,Sharpziplib,System.io.packaging,在我当前的项目中,我要处理大量的文件,这些文件的大小超过了几十毫安,并且容量在1到30 KB之间,作为资源,为我的客户复制这些文件是一项耗时的工作。我正在寻找一种打包机制,可以帮助我将1000或10000个文件打包成一个文件,从而提高复制速度,因为在这种情况下,我处理的文件数量要少得多;此外,从我的应用程序中读取它们不需要任何提取,在我编写或更改它们时也不需要压缩,因为应用程序的性能和性质是分布式的,并且资源在客户端之间共享,我已经搜索过,我知道以下ZIP库: 夏普利布 DotNetZip 系统

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

夏普利布 DotNetZip 系统IO封装 但似乎上面的库需要——至少——在文件中进行迭代,以访问zip或包中的文件,而无需提取。我需要通过zip或包文件中的地址文件夹结构层次结构访问文件!以下链接是通过迭代zip文件回答的类似问题:

有人对这个问题有什么想法或解决办法吗


顺便说一句,我正在用C语言编写代码,这个项目是基于windows窗体的。

我会使用自己的包格式。用GZipStream或者别的什么。对于每个文件,在获得字节值后,使用GZipStream压缩它们,并且需要以包格式创建一个头,其中包含每个文件的名称、起始位置和长度。有了这个数据在你的头,这可能会在你的包的开始。您可以获取所需文件的信息,在查找压缩数据的位置后,就可以得到指定长度的字节数组


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

谢谢亲爱的@jordsi,您的回答让我想到了如何在不进行任何压缩的情况下将小文件打包成更大的文件!