Csharp/C#教程:在尝试从内部Zip文件(另一个Zip中的Zip)获取流时,获取“无法将其作为Zip文件读取”exception分享


在尝试从内部Zip文件(另一个Zip中的Zip)获取流时,获取“无法将其作为Zip文件读取”exception

在C#中,我使用的是DotNetZip,我有一个名为“innerZip.zip”的zip包含一些数据,另一个名为“outerZip.zip”的zip包含innerZip。 为什么我这样做? 好吧,在设置密码时,密码实际上适用于添加到存档而不是整个存档的各个条目,通过使用这个内部/外部组合,我可以设置传递到整个内部zip,因为它是一个条目外面的。

问题是,代码说得比普通单词更好:

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提前..

发生此exception是因为OpenReader创建的CrcCalculatorStream流不可OpenReader ,并且ZipFile.Read(Stream)在打开zip文件时尝试搜索。

zip压缩的性质阻止了在压缩内容中寻找位置,内容必须按顺序解压缩。

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

上述就是C#学习教程:在尝试从内部Zip文件(另一个Zip中的Zip)获取流时,获取“无法将其作为Zip文件读取”exception分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

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

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1002135.html

(1)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐