2012-03-24 5 views
5

Ionic zip позволяет мне добавить существующий файл в zip-объект и создать zip-файл. Но, учитывая, что я читаю этот байт [] из созданного zip-файла и отправки по серверу, мне нужно снова создать zip-файл из этого байта [] для хранения zip на сервере. Как мне это достичь?Ionic Zip: создание zip-файла из байта []

Я использую C#.

ответ

16

Если я правильно понимаю ваш вопрос, вы получите ваш массив byte[] данных по сети и хотите сохранить эти данные в почтовом файле? Вы можете создать новый ZipEntry из MemoryStream который вы создаете из byte[] вы получили (как показано в docs):

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"... 
Смежные вопросы