作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 C# 中,我使用的是 DotNetZip我有一个名为“innerZip.zip”的 zip,其中包含一些数据,和另一个名为“outerZip.zip”的 zip,其中包含 innerZip。我为什么要这样做?好吧,在设置密码时,密码实际上适用于添加到存档中的单个条目,而不是整个存档,通过使用这个内部/外部组合,我可以设置一个通行证到整个内部 zipper ,因为它是外部 zipper 的入口。
问题是,好吧,代码比普通话更能说明问题:
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 文件,所以我不应该得到那个异常(exception)吗?有没有办法解决这个问题,或者我只需要从外部提取内部的,然后访问它?
提前致谢..
最佳答案
出现此异常是因为 OpenReader
创建的 CrcCalculatorStream
流不可搜索,而 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);
关于c# - 尝试从内部 Zip 文件(另一个 Zip 中的 Zip)获取流时出现 "Cannot Read That as a Zip File"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11857913/
我是一名优秀的程序员,十分优秀!