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