Ionic Zip: создание Zip-файла из байта [] - PullRequest
6 голосов
/ 25 марта 2012

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

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

Ответы [ 2 ]

19 голосов
/ 25 марта 2012

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

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");
    }
}
10 голосов
/ 25 марта 2012

Из вашего вопроса не совсем понятно, что вы делаете, но если вы просто пытаетесь избежать сохранения на диск и последующей загрузки для получения данных, просто сохраните в 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"...
...