使用DotNetZip创建Zip文件时出错:存档意外结束

本文关键字:意外 结束 出错 DotNetZip 创建 Zip 文件 使用 | 更新日期: 2023-09-27 18:26:00

我有一个方法可以使用DotNetZip压缩一个或多个文件,并且它一直工作正常。我今天第一次收到一个错误,它似乎与存档的总大小有关。使用相同的60mb.tiff图像,我会添加一些额外的副本,测试,重复。它一直运行良好,直到添加了大约10个图像,然后,当我使用WinRar打开Zip文件时,我会收到"档案意外结束"错误。通过这种方式进行测试,我相信我已经排除了与我的代码或文件有关的问题(损坏或其他什么)。代码没有错误,只有WinRar。当我打开Zip文件时,只显示一个大小为"0"的文件。因此,似乎达到了某种大小限制,不允许创建存档。我只是不知道它是哪个限制。如果有帮助的话,这是我的代码:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AddHeader("content-disposition", "filename=" + "MyFileName" + DateTime.Now.ToString("MMddyyyy") + ".zip");
using (var zip = new Ionic.Zip.ZipFile())
{
    zip.MaxOutputSegmentSize = 819200; // I tried adding this and it did not fix the problem
    foreach (var file in files)
    {
        zip.AddFile(file.FileLocation, file.ZipFileDirectory).FileName = 
            (!string.IsNullOrEmpty(file.ZipFileDirectory) && (file.ZipFileDirectory != @"'")) ? 
                string.Format(@"{0}'{1}", file.ZipFileDirectory, file.FileName) : 
                file.FileName;
    }
    zip.Save(HttpContext.Current.Response.OutputStream);
}

使用DotNetZip创建Zip文件时出错:存档意外结束

这里接受的答案并没有解决我的问题,然而,使用一些注释让我走上了正确的道路。对我来说,解决这个问题所需要的只是添加

HttpContext.Current.Response.End();

在所有处理完成之后(在我的例子中,紧接在代码的示例块之后,在using块之外)。

在完成对流的写入后,是否需要刷新流?

HttpContext.Current.Response.Flush();

编辑:

调用HttpContext.Current.ApplicationInstance.CompleteRequest()