在 C# 中,我使用的是点网压缩我有一个名为“innerZip.zip”的 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 文件,所以我不应该得到这个异常,对吗?
有没有办法解决这个问题,或者我只需从外部提取内部的,然后访问它?
提前谢谢..
出现此异常的原因是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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)