DotNetZip 异常错误状态(无效文字/长度代码)

Posted

技术标签:

【中文标题】DotNetZip 异常错误状态(无效文字/长度代码)【英文标题】:DotNetZip Exception Bad state (invalid literal/length code) 【发布时间】:2018-10-03 18:49:55 【问题描述】:

NET MVC 4 应用程序,在这个应用程序中,我必须下载由 Zip 文件中的字节数组列表表示的多个文件,因此我使用了 DotNetZip 库。当我执行这段代码时:

 using (MemoryStream ms = new MemoryStream())
       
        using (var archive = new ZipFile())
        
         foreach (var item in byteArrays)
         
          var entry = archive.AddEntry("file" + i + ".pdf", item);
          i++;
          archive.Save("All.zip");
           using (var zipStream = entry.OpenReader())
           
           zipStream.Write(item, 0, item.Length);
          
         
        
        return File(ms.ToArray(), "application/zip", "all.zip");
        

在这一行:

zipStream.Write(item, 0, item.Length);

我收到了这个错误:

错误状态(无效文字/长度代码)

Ionic.Zlib.ZlibException 未被用户代码处理 HResult=-2146233088 消息=错误状态(无效文字/长度代码) 来源=DotNetZip StackTrace: 在 Ionic.Zlib.InflateManager.Inflate(FlushType 冲洗) 在 Ionic.Zlib.ZlibCodec.Inflate(FlushType 刷新) 在 Ionic.Zlib.ZlibBaseStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 Ionic.Zlib.DeflateStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 Ionic.Crc.CrcCalculatorStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 Host.Web.Areas.FranceArea.Controllers.FranceController.downloadMultiplefile() 在 C:\Projects\Oddo.Web.OBAM_Icn\Host\Host.Web\Areas\FranceArea\Controllers\FranceController.cs:line 503 在 lambda_method(闭包,ControllerBase,对象 []) 在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数) 在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41() 在 System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass81.<BeginSynchronous>b__7(IAsyncResult _) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult 异步结果) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass37.c__DisplayClass39.b__33() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49() 内部异常:

【问题讨论】:

打开读写器? 【参考方案1】:

您无需调用zipStream.Write,因为您已经在.AddEntry 调用中传递了数据。

这对我有用:

var i = 1;

using (var outStream = new MemoryStream())

    using (var archive = new ZipFile())
    
        foreach (var item in byteArrays)
        
            using (MemoryStream ms = new MemoryStream(item))
            
                var entry = archive.AddEntry($"filei++.pdf", ms);
                archive.Save(outStream);
            
        
    
    outStream.Position = 0;
    return File(outStream.ToArray(), "application/zip", "all.zip");

【讨论】:

感谢您的回复,它可以下载存档,但是当我打开 zip 并尝试打开或提取文件时,我发现文件无法打开,因为它已损坏...这种问题的原因是什么? 您可以检查您的字节数组是否是有效的 pdf,还可以检查 zip 中的文件是否与您的字节数组具有相同的长度 是的,当我打开存档并检查文件的大小时,我可以看到它们保持初始大小,这意味着没有丢失数据:/ 但问题仍然存在

以上是关于DotNetZip 异常错误状态(无效文字/长度代码)的主要内容,如果未能解决你的问题,请参考以下文章

使用 DotNetZip 打开拆分 Zip 文件

Json.NET 中的异常:处于“开​​始”状态的令牌 PropertyName 将导致无效的 JavaScript 对象

异常类型:ValueError at /music/1/favourite/ 异常值:int() 的无效文字,基数为 10:'on'

异常处理

PHP 异常处理

PHP 异常处理