C# DotNetZip异常错误状态(无效的文字/长度代码)
NET MVC 4应用程序,在这个应用程序中,我必须下载一个Zip文件中由字节数组列表表示的多个文件,因此我使用了DotNetZip库。当我执行这段代码时,如果:C# DotNetZip异常错误状态(无效的文字/长度代码),c#,asp.net-mvc,dotnetzip,C#,Asp.net Mvc,Dotnetzip,NET MVC 4应用程序,在这个应用程序中,我必须下载一个Zip文件中由字节数组列表表示的多个文件,因此我使用了DotNetZip库。当我执行这段代码时,如果: using (MemoryStream ms = new MemoryStream()) { using (var archive = new ZipFile()) { foreach (var item in byteArrays) {
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消息=错误状态无效文字/长度代码
Source=DotNetZip堆栈跟踪:
在Ionic.Zlib.InflateManager.inflateFlush类型冲洗时
在Ionic.Zlib.ZlibCodec.inflateFlush类型刷新时
在Ionic.Zlib.ZlibBaseStream.WriteByte[]缓冲区,Int32偏移量,Int32计数
在Ionic.Zlib.DeflateStream.WriteByte[]缓冲区,Int32偏移量,Int32计数
在Ionic.Crc.CrcCalculatorStream.WriteByte[]缓冲区,Int32偏移量,Int32计数
在Host.Web.Areas.FranceArea.Controllers.FranceController.downloadMultiplefile
在里面
C:\Projects\Oddo.Web.OBAM\u Icn\Host\Host.Web\Areas\FranceArea\Controllers\FranceController.cs:line
503
在lambda_methodClosure,ControllerBase,Object[]
在System.Web.Mvc.ActionMethodDispatcher.ExecuteControllerBase controller中,对象[]参数
位于System.Web.Mvc.ReflectedActionDescriptor.ExecuteControllerContext
controllerContext,IDictionary2参数
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodControllerContext
controllerContext,ActionDescriptor ActionDescriptor,IDictionary2
参数
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41
在System.Web.Mvc.Async.AsyncResultRapper.c__DisplayClass81.b__7IAsyncResult中
_
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult1.End
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodIAsyncResult
异步结果
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass37.c__DisplayClass39.b__33
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49
内部异常:
您不需要调用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($"file{i++}.pdf", ms);
archive.Save(outStream);
}
}
}
outStream.Position = 0;
return File(outStream.ToArray(), "application/zip", "all.zip");
}
打开读写器?感谢您的回复,下载归档文件很有效,但当我打开zip并尝试打开或解压缩文件时,我发现文件无法打开,因为它已损坏。。。出现这种问题的原因是什么?您可以检查字节数组是否为有效的PDF,还可以检查zip中的文件是否与字节数组具有相同的长度是的,当我打开存档并检查文件大小时,我可以看到它们保持了初始大小,这意味着没有丢失数据:/但是问题仍然存在