C#从不可查找的流中读取大型zip存档



我在一个不可查找的流中提供了一个zip文件。zip文件本身的大小大于Int32.MaxValue。我的目标是读取zip文件中包含的一个条目,并将其输出到某个目标流。类似于此:

using var cs = new System.Security.Cryptography.CryptoStream (...);
using var z = new System.IO.Compression.ZipArchive (cs, ZipArchiveMode.Read);
var entry = zip.GetEntry("1");
entry.Open().CopyTo(...);

由于流不支持查找,System.IO.Compression.ZipArchive类尝试将流复制到后备MemoryStream中。由于MemoryStream的大小限制为2GB并引发IOException:,因此此操作失败

流太长。

在读取条目之前,我希望避免将整个流下载到文件中。有办法做到这一点吗?使用其他库对我来说很好。

可以读取流两次或三次。我希望这足以定位条目内容,以便对其进行解压缩。

这个库似乎正是您(我们(所需要的:https://github.com/adamhathcock/sharpcompress

来自他们的自述。md:

主要功能是支持不可查找的流,因此支持大文件可以动态处理(即下载流(。

请注意,另一个选项是使用管道:https://learn.microsoft.com/en-us/dotnet/standard/io/pipelines

我最终使用了标准的deflate库。我认为最好将管道与您选择的任何一个库一起使用,可能带有管道的zlibstream会起作用。

最新更新