2011-03-28 2 views
2

ICSharpCode.SharpZipLib.Zip을 사용하여 파일 및 폴더를 압축하고 response.Binary write를 사용하여 memorystream으로 전달합니다. 나는 out.zip 파일을 열려고 할 때, zip 파일이 손상 손상되었거나 중 하나라고 말을하고, CRC 값은 000000로 표시되어ICSharpCode.SharpZipLib.Zip crc32

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(); 

:

여기 내 코드입니다.

이 해결책은 무엇입니까? 이 오류가 발생하는 이유는 무엇입니까?

답변

2

내가 추측을 것입니다, 당신은 호출해야합니다 :

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

을 명시 적으로 닫기 전에 스트림 "s"를 플러시 df.GetBuffer()

+0

+1 SharpZipLib에서 문제가 발생하기 전에 내가 플러시 할 필요가있을 때 플러시되지 않는 것을 막아 버렸습니다. – Shibumi

+0

작동하지 않습니다. 다른 솔루션.? –

+0

df는 MemoryStream이며 비워 둘 필요가 없습니다. MemoryStream은 빈 메서드로 Flush()를 재정의합니다. – GoetzOnline

0

시도를 호출 직전.