gpt4 book ai didi

c# - 尝试从内部 Zip 文件(另一个 Zip 中的 Zip)获取流时出现 "Cannot Read That as a Zip File"异常

转载 作者:太空狗 更新时间:2023-10-29 23:09:27 27 4
gpt4 key购买 nike

在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com