得到一个尝试获取来自内蒙古Zip文件流(另一邮编内的邮政)“不能读取为ZIP文件”异常(Gettin

2019-06-26 20:53发布

在C#中,我使用的是DotNetZip我有一个名为“innerZip.zip”,其中包含了一些数据压缩,以及被称为“outerZip.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);

为什么我得到那个异常? 内部文件是一个压缩文件,所以我不应该得到这个异常吗? 有没有办法来解决这个问题或者我只需要提取外内一个,然后访问它?

感谢名单提前..

Answer 1:

发生此异常是因为CrcCalculatorStream该流OpenReader创建是不可搜索,并ZipFile.Read(Stream)试图寻求在打开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);


文章来源: Getting a “Cannot Read That as a Zip File” Exception while trying to get a stream from an Inner Zip File (a Zip within another Zip)
标签: c# dotnetzip