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

Каков наилучший/простой способ создания ZIP-архива в .NET?

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

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

[Я могу настроить Target Framework 3.5; best = проще всего спроектировать, реализовать и поддерживать.]

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

Я понимаю, что это старый вопрос сейчас, но я просто подумал, что добавлю более актуальный ответ. Если вы используете .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);

Ответ 5

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

UPDATE: В комментариях правильно указано, что эти классы не позволяют вам манипулировать Zip файлом. Тем не менее, J # dll содержат требуемую функциональность в пространствах java.util и java.io. Более подробную информацию см. В статье статьи проекта кода от dmihailescu, которая подробно описывает их использование и предоставляет пример кода.

Ответ 6

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

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

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

Ответ 7

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