C# ICSharpCode.SharpZipLib.Zip crc32

C# ICSharpCode.SharpZipLib.Zip crc32,c#,asp.net,sharepoint,sharpziplib,C#,Asp.net,Sharepoint,Sharpziplib,我正在使用ICSharpCode.SharpZipLib.Zip压缩文件和文件夹,并使用response.Binary write将其作为memorystream传递 这是我的密码: MemoryStream df= new MemoryStream(); ZipOutputStream s = new ZipOutputStream(df); s.SetLevel(9); byte[] data = (byte[])file.OpenBinary(); s.W

我正在使用ICSharpCode.SharpZipLib.Zip压缩文件和文件夹,并使用response.Binary write将其作为memorystream传递

这是我的密码:

MemoryStream df= new MemoryStream();                
ZipOutputStream s = new ZipOutputStream(df);
s.SetLevel(9);

byte[] data = (byte[])file.OpenBinary();
s.Write(data, 0, data.Length);
s.Finish();

s.Close();
byte[] outBuf = df.GetBuffer();        
Response.Expires = 0;                 
Response.Buffer = true;                 
Response.ClearContent();                
Response.AddHeader("content-disposition", "inline; filename="out.zip");
Response.ContentType = "application/zip";
Response.BinaryWrite(outBuf);
HttpContext.Current.ApplicationInstance.CompleteRequest();
当我试图打开out.zip文件时,它表示zip文件已损坏或丢失 已损坏,crc值显示为000000

解决这个问题的办法是什么?
为什么会发生此错误?

我猜,您应该打电话:

s.Flush();
df.Flush();

在调用
df.GetBuffer()
之前,请尝试在关闭前显式刷新流“s”。

+1因为我以前遇到过SharpZipLib问题,这是因为我在需要刷新时没有刷新内容。df是一个MemoryStream,不需要刷新。MemoryStream使用空方法重写Flush()。