我在一个不可查找的流中提供了一个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会起作用。