Какой самый лучший / самый простой способ создать ZIP-архив в .NET? - PullRequest
32 голосов
/ 22 декабря 2008

Какой метод вы считаете «лучшим».

  • Использовать пространство имен System.IO.Packaging?
  • Использовать взаимодействие с Shell?
  • Сторонняя библиотека для .NET?
  • Взаимодействие с неуправляемой DLL с открытым исходным кодом?

[Я могу нацеливаться на Framework 3.5; лучший = самый простой для проектирования, реализации и обслуживания.]

Меня больше всего интересует, почему вы считаете, что выбранный подход является лучшим.

Ответы [ 8 ]

23 голосов
/ 22 декабря 2008

Я всегда использовал SharpZipLib

Забыл часть почему: главным образом потому, что это было вокруг в течение долгого времени. Он хорошо документирован и имеет интуитивно понятный API. Кроме того, это открытый исходный код, если вы любите подобные вещи.

16 голосов
/ 04 января 2009

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 так же как Самораспаковывающиеся архивы. Это быстро. Попытайся.

16 голосов
/ 22 декабря 2008

Я обнаружил, что DotNetZip Library - это самый простой способ работы с zip-файлами. SharpZipLib - гораздо более мощное и гибкое решение.

14 голосов
/ 09 мая 2014

Я понимаю, что это старый вопрос сейчас, но я просто решил добавить более актуальный ответ. Если вы используете .NET 4.5, то вы можете программно сохранить несколько файлов в zip-папку, используя новую встроенную ZipFile class .

Сначала вам нужно подготовить файлы в новую папку (Directory.CreateDirectory, File.Move), а затем вы можете просто использовать ZipFile.CreateFromDirectory Метод (адаптировано со связанной страницы) :

string filePathOfNewFolder = @"c:\example\start";
string zipFilePath = @"c:\example\result.zip";

ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);
2 голосов
/ 22 декабря 2008

Никто не упомянул компонент Xceed Zip. Я использовал его раньше, и он отлично работал для создания zip-файлов и сжатия потоков данных. Я очень рекомендую это, но может быть компромисс платы за лицензию.

2 голосов
/ 22 декабря 2008

Классы GZipStream и DeflateStream в пространстве имен System.IO.Compression позволяют легко заархивировать вещи.

UPDATE: Комментарии правильно утверждают, что эти классы не позволяют вам манипулировать Zip-файлом. Однако библиотеки J # содержат необходимые функциональные возможности в пространствах имен java.util и java.io. Для получения более подробной информации см. Статью Code Project от dmihailescu, в которой подробно описано их использование и приведен пример кода.

1 голос
/ 22 декабря 2008

Поскольку вы нацеливаетесь на Framework 3.5, я бы выбрал System.IO.Packaging. Это библиотека, разработанная специально для архивирования, и поставляется с фреймворком, поэтому продукту не нужна даже дополнительная DLL. Однако пример использования ужасен.

Использование оболочки не рекомендуется. Во-первых, это будет работать только на Windows XP и выше. Но даже если вас это не волнует, ловушек довольно много (я делал это раньше, но только потому, что у меня действительно не было выбора).

, если вы не нацеливаетесь на 3,5, я бы использовал SharpZipLib. Это довольно хорошая библиотека, и даже если вы используете 3.5, вы можете рассмотреть ее.

0 голосов
/ 24 июня 2018

Ultimate ZIP - это высокопроизводительный и надежный компонент сжатия, который позволяет легко создавать и управлять архивами ZIP, TAR, TGZ, GZ на лету, а также просматривать содержимое ранее созданного архива прямо в .NET кроссплатформенные приложения. Написанный исключительно на C # с применением лучших шаблонов проектирования и низкоуровневой оптимизации .NET, он обеспечивает производительность, надежность и расширяемость для ваших приложений .NET. Пакет поставляется с несколькими фрагментами кода и полностью документированными примерами в VB.NET и C #, иллюстрирующими, как создавать, архивировать и распаковывать архивы.

Окончательный ZIP-компонент для .NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...