Ответ 1
Я всегда использовал SharpZipLib
Забыл почему: В основном потому, что он был вокруг в течение длительного времени. Он хорошо документирован и имеет интуитивно понятный API. Плюс это с открытым исходным кодом, если вы занимаетесь этим.
Какой метод вы считаете "лучшим".
System.IO.Packaging
?[Я могу настроить Target Framework 3.5; best = проще всего спроектировать, реализовать и поддерживать.]
Меня больше интересует, почему вы считаете, что выбранный подход лучше всего.
Я всегда использовал SharpZipLib
Забыл почему: В основном потому, что он был вокруг в течение длительного времени. Он хорошо документирован и имеет интуитивно понятный API. Плюс это с открытым исходным кодом, если вы занимаетесь этим.
Я нашел DotNetZip Library как самый простой способ работы с zip файлами. SharpZipLib - гораздо более мощное и гибкое решение.
DotNetZip очень прост в использовании. Мне нравится, потому что он полностью управляется - взаимодействие оболочки не требуется. Модель программирования проще и чище, чем для оболочки. Кроме того, это проще, чем SharpZipLib, а также классы Packaging, добавленные в .NET 3.0. Он бесплатный, небольшой, активно поддерживается.
Это намного лучше, чем опция J #, которую предлагает один плакат. J # - это огромная среда исполнения и гигантская таблетка, чтобы усвоить, чтобы получить поддержку ZIP. Также поддержка J # прекращается. Вероятно, не очень хорошая идея ввести новые зависимости от J #.
Пример кода для DotNetZip:
try
{
using (ZipFile zip = new ZipFile(args[0], System.Console.Out))
{
zip.AddDirectory(args[1]); // recurses subdirectories
zip.Save();
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
DotNetZip работает с .NET v2.0, 3.0, 3.5, а также с Compact Framework v2.0 и 3.5. Это ZIP файлы, имена файлов Unicode, комментарии, пароли. Это ZIP64, а также самораспаковывающиеся архивы. Это БЫСТРО. Попробуй.
Я понимаю, что это старый вопрос сейчас, но я просто подумал, что добавлю более актуальный ответ. Если вы используете .NET 4.5, вы можете программно сэкономить несколько файлов в zip-папке с помощью нового встроенного класса ZipFile
.
Сначала вам нужно подготовить свои файлы в новую папку (Directory.CreateDirectory
, File.Move
), а затем вы можете просто использовать ZipFile.CreateFromDirectory
Method (адаптировано со связанной страницы):
string filePathOfNewFolder = @"c:\example\start";
string zipFilePath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);
Классы GZipStream и DeflateStream в пространстве имен System.IO.Compression позволяют легко застегнуть вещи.
UPDATE: В комментариях правильно указано, что эти классы не позволяют вам манипулировать Zip файлом. Тем не менее, J # dll содержат требуемую функциональность в пространствах java.util и java.io. Более подробную информацию см. В статье статьи проекта кода от dmihailescu, которая подробно описывает их использование и предоставляет пример кода.
Поскольку вы нацеливаете Framework 3.5, я бы пошел с System.IO.Packaging
. Это библиотека, разработанная специально для zipping, и поставляется с фреймворком, поэтому нет необходимости в дополнительной DLL, необходимой для продукта. Однако пример использования является жестоким.
Использование оболочки не рекомендуется. Во-первых, он будет работать только в Windows XP и выше. Но даже если вас это не волнует, это ловушки довольно многочисленны (я делал это раньше, но только потому, что у меня действительно не было выбора).
Если вы не настроите 3.5, я бы использовал SharpZipLib
. Это неплохая библиотека, и даже если вы используете 3.5, вы можете ее рассмотреть.
Никто не упомянул компонент Xceed Zip. Я использовал его раньше, и он отлично работал для создания zip файлов и сжатия потоков данных. Я очень рекомендую его, но может быть компромисс между лицензионными комиссиями.