Кто-нибудь знает, как быстро сжать или распаковать файлы и папки на С#? Может потребоваться обработка больших файлов.
Сжатие/декомпрессию папок и файлов
Ответ 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();
}
Ответ 2
Я всегда использовал библиотеку SharpZip.
Ответ 3
Начиная с .Net 1.1, единственный доступный метод входит в java-библиотеки.
Использование классов Zip в библиотеках классов J # для сжатия файлов и данных с помощью С#
Не уверен, что это изменилось в последних версиях.
Ответ 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.