Подтвердить что ты не робот

Сжатие/декомпрессию папок и файлов

Кто-нибудь знает, как быстро сжать или распаковать файлы и папки на С#? Может потребоваться обработка больших файлов.

4b9b3361

Ответ 1

Пространство имен Framework.Net 2.0 System.IO.Compression поддерживает алгоритмы GZip и Deflate. Вот два метода сжатия и распаковки потока байтов, который вы можете получить из своего файлового объекта. Вы можете подписать GZipStream для DefaultStream в приведенных ниже методах, чтобы использовать этот алгоритм. Это все еще оставляет проблему обработки файлов, сжатых различными алгоритмами.

public static byte[] Compress(byte[] data)
{
    MemoryStream output = new MemoryStream();

    GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
    gzip.Write(data, 0, data.Length);
    gzip.Close();

    return output.ToArray();
}

public static byte[] Decompress(byte[] data)
{
    MemoryStream input = new MemoryStream();
    input.Write(data, 0, data.Length);
    input.Position = 0;

    GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);

    MemoryStream output = new MemoryStream();

    byte[] buff = new byte[64];
    int read = -1;

    read = gzip.Read(buff, 0, buff.Length);

    while (read > 0)
    {
        output.Write(buff, 0, read);
        read = gzip.Read(buff, 0, buff.Length);
    }

    gzip.Close();

    return output.ToArray();
}

Ответ 4

Вы можете использовать стороннюю библиотеку, такую ​​как SharpZip, как указал Том.

Другой способ (без участия сторонних разработчиков) - использовать API оболочки Windows. Вам нужно будет установить ссылку на библиотеку Microsoft Shell Controls и Automation COM в вашем проекте С#. На примере Джеральда Гибсона:

http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx

Архивная копия мертвой страницы

Ответ 5

Мой ответ будет закрыт глазами и выберите DotNetZip. Он был протестирован большим сообществом.

Ответ 6

Это очень легко сделать в java, и, как указано выше, вы можете попасть в библиотеки java.util.zip из С#. Для справки см.:

java.util.zip javadocs
пример кода

Я использовал это некоторое время назад, чтобы сделать глубокую (рекурсивную) zip структуру папок, но я не думаю, что когда-либо использовал распаковку. Если я так мотивирован, я могу вытащить этот код и отредактировать его позже.

Ответ 7

GZipStream - действительно полезная утилита для использования.

Ответ 8

Еще одна хорошая альтернатива - DotNetZip.