Как я могу Сжать каталог с.NET?

У меня есть каталог, который содержит несколько файлов. Я хочу, сжимают эту папку до zip или tar.gz файла. Как я могу сделать его работу в C#?

10
задан John Saunders 10 February 2010 в 10:33
поделиться

8 ответов

Вы можете использовать DotNetZip Library. Она имеет достаточно богатые и полезные возможности.


EDIT:

string[] MainDirs = Directory.GetDirectories(DirString);

for (int i = 0; i < MainDirs.Length; i++)
{
    using (ZipFile zip = new ZipFile())
    {
        zip.UseUnicodeAsNecessary = true;
        zip.AddDirectory(MainDirs[i]);
        zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
        zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");
        zip.Save(string.Format("test{0}.zip", i));   
    }
}
8
ответ дан 3 December 2019 в 17:20
поделиться

Я не думаю, что Windows делает что-то особенно умное (например, пытается переосмыслить поплавок в базе 10) здесь: я бы предположил, что это просто точное вычисление первых 17 значащих цифр (что даст '11.545000000000000'), а затем прикрепление дополнительных нулей в конце, чтобы составить требуемое количество мест после точки.

Как говорят другие, различные результаты для 0,125 получены от Windows, использующей округление наполовину вверх, и Linux, использующей округление наполовину четно.

Обратите внимание, что для Python 3.1 (и Python 2.7, когда он появляется) результат форматирования float будет независимым от платформы (за исключением, возможно, необычных платформ).

-121--4028662-

No.

Как только класс декалорирован, он не может быть «unset»

Возможно, пространства имен могут быть полезны для вас?

-121--4268389-

я использую пространство имен System.IO.Packaging, которое было введено в .NET Framework 3.5. Я решил использовать его, потому что он основан на классах .NET Рамки Base, и не требуется код третьей стороны, который взрывает размер кода..

вот еще одна запись на Stackoverflow относительно этого вопроса

И вот объявление пространства имен и ZipPackage/объяснение @ MSDN

надежда, которая помогает

Кристиану

2
ответ дан 3 December 2019 в 17:20
поделиться

Это хорошее обсуждение , в котором обсуждается возможность сделать это без сторонних библиотек. Я думаю, тебе стоит взглянуть на это.

Вот большой репозиторий примеров кодов, которые могут помочь вам в вашей работе. Удачи ..

0
ответ дан 3 December 2019 в 17:20
поделиться

В моей предыдущей работе мы использовали #ziplib .

1
ответ дан 3 December 2019 в 17:20
поделиться

GZip является частью Microsoft Framework 2.0 и более поздних версий. Он называется GZipStream в пространстве имен System.IO.Compression.

Чтобы сжать каталог с помощью этого класса, вам нужно создать сериализуемый класс (например, Directory), который содержит коллекцию файлов.

Класс Files будет содержать имя файла и поток файла для чтения байтов из файла. Как только вы примените GZip к каталогу, он будет читать файлы один за другим и записывать их в GZipStream.

Проверьте эту ссылку: http://www.vwd-cms.com/forum/forums.aspx?topic=18

0
ответ дан 3 December 2019 в 17:20
поделиться

Другой вариант до версии 3.5 - использование утилит zip от J#. В конце концов, .Net не имеет значения, на каком языке был написан код ;-).

Статьи о том, как это сделать:

0
ответ дан 3 December 2019 в 17:20
поделиться

Попробуйте использовать SharpZipLib . Он поддерживает сжатие как GZip, так и ZIP в C #.

Здесь есть отличный учебник , в котором описывается, что вам нужно сделать, чтобы заархивировать каталог с помощью SharpZipLib.

8
ответ дан 3 December 2019 в 17:20
поделиться

использовать 7zip из командной строки в C# --> LZMA SDK поддерживает C#, и в пакете есть кодовые примеры

3
ответ дан 3 December 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: