当zipenty很多时,ZipOutputStream会生成损坏的zip文件

时间:2014-01-10 11:13:57

标签: c# asp.net dotnetzip sharpziplib

我有下面的代码来模拟我尝试使用SharpZipLib执行的操作。当'i'的限制很低时,生成的zip文件运行良好。但由于'i'倾向于高值,例如100,生成的zip文件已损坏。当我修复它时,它打开没关系。我正在制造什么错误。谢谢。

using(MemoryStream memoryStream = new MemoryStream())
using (ZipOutputStream zipOutputStream = new ZipOutputStream(memoryStream))
{
    zipOutputStream.SetLevel(3);
    for (int i = 1; i < 10; i++)
    {
        ZipEntry zipEntry = new ZipEntry("Test" + i.ToString() + ".xlsx");
        zipEntry.DateTime = DateTime.Now;
        zipOutputStream.PutNextEntry(zipEntry);
        using (Stream inputStream = File.OpenRead(@templatePath))
        {
            StreamUtils.Copy(inputStream, zipOutputStream, 
              new byte[inputStream.Length]);
            inputStream.Close();

            zipOutputStream.CloseEntry();
        }
    }

    zipOutputStream.IsStreamOwner = false;
    zipOutputStream.Close();

    memoryStream.Position = 0;
    WorkbookUtil.StreamFileToBrowser("Report.Zip", memoryStream.GetBuffer());
}

WorkbookUtil.StreamFileToBrowser是我将文件下载到用户浏览器的静态方法

更新

这是下载到浏览器的方法

public static void StreamFileToBrowser(string sFileName, byte[] fileBytes)
        {
            System.Web.HttpContext context = System.Web.HttpContext.Current;
            context.Response.Clear();
            context.Response.ClearHeaders();
            context.Response.ClearContent();
            context.Response.AppendHeader("content-length", fileBytes.Length.ToString());
            context.Response.ContentType = GetMimeTypeByFileName("application/zip");
            context.Response.AppendHeader("content-disposition", "attachment; filename=" + sFileName);
            context.Response.BinaryWrite(fileBytes);

            context.ApplicationInstance.CompleteRequest();
        }

0 个答案:

没有答案