Распаковать ZIP Stream - PullRequest
       17

Распаковать ZIP Stream

0 голосов
/ 01 апреля 2019

Почему-то я не могу найти никаких примеров для этого с DotNetZip.

Я получаю Gziped контент от моего WebAPI.

Все, что я хочу сделать, это прочитать этот поток памяти из ответа и распаковать содержимое (текст) в строку.

Мое сжатие работает нормально, я просто не могу распаковать:

public static byte[] CompressData(byte[] str)
{
    using (var output = new MemoryStream())
    {
        using (
            var compressor = new Ionic.Zlib.DeflateStream(
            output, Ionic.Zlib.CompressionMode.Compress,
            Ionic.Zlib.CompressionLevel.BestSpeed))
        {
            compressor.Write(str, 0, str.Length);
        }

        return output.ToArray();
    }
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Хорошо, я нашел решение. Довольно просто на самом деле, но очень плохо документировано в Интернете.

 public static byte[] Decompress(Stream ms)
{
    byte[] outData = null;
    using (MemoryStream msInner = new MemoryStream())
    {
        using (DeflateStream defStream = new DeflateStream(ms, CompressionMode.Decompress))
        {
            defStream.CopyTo(msInner);
            outData = msInner.ToArray();
        }
    }

    return outData;
}
0 голосов
/ 01 апреля 2019

Следующий код показывает, как программа извлекает файлы из архива.

private void ExtractArchive(object sender, EventArgs e)
{
    try
    {
        using (ZipFile zip = ZipFile.Read(txtArchiveName.zip))
        {
            // Loop through the archive's files.
            foreach (ZipEntry zip_entry in zip)
            {
                zip_entry.Extract(txtExtractTo);
            }
        }

        MessageBox.Show("Done");
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error extracting archive.\n" +
            ex.Message);
    }
}

Самый простой способ извлечь все записи из zip-файла выглядит так:

using (ZipFile zip = ZipFile.Read(NameOfExistingZipFile))
  {
    zip.ExtractAll(args[1]);
  }
...