2012-03-24 2 views
5

이오닉 zip을 사용하면 기존 파일을 zip 객체에 추가하고 zip 파일을 만들 수 있습니다. 그러나 내가 작성한 zip 파일에서 바이트 []를 읽고 서버를 통해 전송한다고 생각하면 서버에 zip을 저장하기 위해 해당 바이트 []에서 zip 파일을 다시 작성해야합니다. 이것을 어떻게 성취합니까?이오닉 Zip : 바이트 []에서 Zip 파일 생성

저는 C#을 사용하고 있습니다.

답변

16

을, 당신은 네트워크를 통해 byte[] 데이터 배열을 얻을 zip 파일에 데이터를 저장하려면? 당신은 당신이합니다 (docs 참조) 당신이있어 byte[]에서 만든 MemoryStream에서 ZipEntry 새를 만들 수 있습니다

byte[] data = MethodThatReceivesYourDataOverTheNet(); 
using (MemoryStream stream = new MemoryStream(data)) 
{ 
    using (ZipFile zip = new ZipFile()) 
    { 
     zip.AddEntry("name_of_the_file_in_the_arhive.bin", "base", stream); 
     zip.Save("example.zip"); 
    } 
} 
+0

감사합니다. 그게 바로 제가 찾고 있던 것입니다. – Cannon

+0

AddEntry는 더 이상이 생성자를 제공하지 않습니다. 스트림을 전달할 수있는 유일한 메소드는 이제 AddEntry ([fileName], [Stream])입니다. – JRodd

9

이 아니에요 당신이 무슨 일을하는지 질문에서 정말 선택 -하지만 당신은 단지 데이터를 가져 오기 위해 다시로드 한 후 디스크에 저장 피하기 위해 노력하고 있다면, 단지 MemoryStream에 저장합니다

byte[] data; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    zipFile.Save(ms); 
    data = ms.ToArray(); 
} 
// Do whatever with data. 

또한, 다른 복사본 만들기 피하기 위해 MemoryStream.GetBuffer()을 사용 : 내가 제대로 질문을 이해한다면

byte[] buffer; 
int length; 
using (MemoryStream ms = new MemoryStream()) 
{ 
    zipFile.Save(ms); 
    buffer = ms.ToArray(); 
    length = ms.Length; 
} 

// Now use buffer, but only up to "length"...