Как заархивировать файл в коде на С#?

Я пытаюсь заархивировать файл в коде. Ошибка в методе static void CopyStream в строке "dest.Write(buffer, 0, len);". Ошибка: «Плохое состояние (неизвестный метод сжатия (0x4D)»). Любая идея, почему это происходит?

    public byte[] ZippingFile()
    {
        MemoryStream dest = new MemoryStream();
        FileStream file = new FileStream(tbPath.Text + @"\" +    tbFileName.Text, FileMode.Open, FileAccess.Read);
        byte[] array = new byte[0];
        try
        {
            ZlibDecompression(file, dest);
            array = dest.ToArray();

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK,
                            MessageBoxIcon.Error);
        }
        finally
        {
            file.Close();
            dest.Close();
        }
        return niz;
    }


    private void ZlibDecompression(Stream src, MemoryStream dest)
    {
        src.Seek(0, SeekOrigin.Begin);
        using (ZlibStream zlibStreamOut = new ZlibStream(dest, CompressionMode.Decompress, CompressionLevel.Level4, true))
        {
            CopyStream(src, zlibStreamOut);
            zlibStreamOut.Close();
            dest.Seek(0, SeekOrigin.Begin);
        }
    }

    static void CopyStream(Stream src, Stream dest)
    {
        byte[] buffer = new byte[1024];
        int len = src.Read(buffer, 0, buffer.Length);
        while (len > 0)
        {
            dest.Write(buffer, 0, len);
            len = src.Read(buffer, 0, buffer.Length);
        }
        dest.Flush();
    }

person nemostyle    schedule 05.09.2016    source источник
comment
Мне показалось, что вы распаковываете файл с помощью ZlibDecompression, а не заархивируете.   -  person huse.ckr    schedule 05.09.2016


Ответы (1)


Если вы пытаетесь «заархивировать» файл, вам следует использовать CompressionMode.Compress. «Неизвестный метод сжатия (0x4D)», вероятно, означает, что есть буква M в позиции, которую процедура распаковки ожидает найти код того, как файл был сжат — может быть, самый первый символ в вашем файле.

person PaulF    schedule 05.09.2016