C# 得到一个;无法将其作为Zip文件读取";尝试从内部Zip文件(另一个Zip中的Zip)获取流时发生异常

C# 得到一个;无法将其作为Zip文件读取";尝试从内部Zip文件(另一个Zip中的Zip)获取流时发生异常,c#,dotnetzip,C#,Dotnetzip,在C#中,我使用的是DotNetZip 我有一个名为“innerZip.zip”的压缩包,其中包含一些数据, 和另一个名为“outerZip.zip”的zip,其中包含innerZip。 我为什么要这样做? 在设置密码时,密码实际上应用于添加到存档的单个条目,而不是整个存档,通过使用此内部/外部组合, 我可以设置整个内部拉链的通行证,因为它是外部拉链的入口 问题是,代码比普通的单词更能说话: ZipFile outerZip = ZipFile.Read("outerZip.zip"); out

在C#中,我使用的是DotNetZip 我有一个名为“innerZip.zip”的压缩包,其中包含一些数据, 和另一个名为“outerZip.zip”的zip,其中包含innerZip。 我为什么要这样做? 在设置密码时,密码实际上应用于添加到存档的单个条目,而不是整个存档,通过使用此内部/外部组合, 我可以设置整个内部拉链的通行证,因为它是外部拉链的入口

问题是,代码比普通的单词更能说话:

ZipFile outerZip = ZipFile.Read("outerZip.zip");
outerZip.Password = "VeXe";
Stream innerStream = outerZip["innerZip.zip"].OpenReader();
ZipFile innerZip = ZipFile.Read(innerStream); // I'm getting the exception here.
innerZip["Songs\\IronMaiden"].Extract(tempLocation);
为什么我会得到那个例外? 内部文件是一个zip文件,所以我不应该得到这个异常,对吗? 有没有办法绕过这个问题,或者我只需要从外部提取内部的,然后访问它


Thanx Prevance.

发生此异常是因为
CrcCalculatorStream
创建的
OpenReader
流不可查找,并且
ZipFile.Read(stream)
在打开zip文件时尝试查找

zip压缩的本质是防止查找压缩内容中的某个位置,因此必须按顺序对内容进行解压缩

解决这个问题的一种方法是将内部zip文件解压缩到
MemoryStream
,然后通过
ZipFile.Read
加载该文件

MemoryStream ms = new MemoryStream();
outerZip["innerZip.zip"].Extract(ms);
ms.Seek(0, SeekOrigin.Begin);
ZipFile innerZip = ZipFile.Read(ms);
innerZip["Songs\\IronMaiden"].Extract(tempLocation);

我知道这篇文章有点过时。但是谢谢你的提示!它省去了我一个同事几个小时的摆弄+1.