Публикации
Публикации  »  C#, C++

Работа с zip-архивами в .NET Framework 3.5 на C#

Поддержка zip-архивирования появилась в .NET начиная с версии 4.5. В этой заметке я рассмотрю как работать с zip архивами в предыдущих версиях .NET, в частности в 3.5 и покажу примеры как упаковать файлы или папку в zip архив и как распаковать zip архив.

Итак, поскольку в .Net 3.5 нет встроенных функций, придется использовать внешнюю библиотеку. Наилучшим выбором, на мой взгляд, является DotNetZip. Эта библиотека проста в использовании, очень быстрая и при этом имеет гораздо больше методов для работы с архивами, чем даже стандартный ZipFile в .Net 4.5.

По приведенной выше ссылке можно скачать архив со всеми релизами этой библиотеки, либо, можете скачать последний релиз v1.9 на момент написания этой статьи. Подключение библиотеки к проекту - стандартное, через добавление ссылки. Теперь покажу несколько основных примеров как работать с этой библиотекой в .Net 3.5 на C#.

Создание zip архива и добавление в него файлов

using (ZipFile zip = new ZipFile())
{
  zip.AddFile("ReadMe.txt");
  zip.AddFile("ReadMe.doc");
  zip.Save("arhive.zip");
}

Добавить файл в zip архив без полного пути (иерархии) к нему

Второй необязательный параметр AddFile позволяет указать путь к файлу внутри архива и он может отличаться от реального пути к файлу. Так же этот параметр можно указать "" и тогда файл будет добавляться в "корень" архива без какой-либо иерархии папок.

using (ZipFile zip = new ZipFile())
{
  zip.AddFile("ReadMe.txt", "");
  zip.Save("arhive.zip");
}

Создание зашифрованного (запароленного) zip-архива

Шифровать можно как все добавляемые в архив файлы, так и отдельные файлы, либо использовать разные пароли для разных файлов.

using (ZipFile zip = new ZipFile())
{
  zip.AddFile("ReadMe1.txt"); // не будет зашифрован
  zip.Password= "123";
  zip.AddFile("ReadMe2.txt"); // будет зашифрован с паролем 123
  zip.AddFile("ReadMe3.txt"); // будет зашифрован с паролем 123
  zip.Password= "456";
  zip.AddFile("ReadMe4.txt"); // будет зашифрован с паролем 456
  zip.Save("backup.zip");
}

Упаковка всей папки с файлами (директории) рекурсивно

using (ZipFile zip = new ZipFile())
{
  zip.AddDirectory(@"C:\Work\MyFolder");
  zip.Save(ZipFileToCreate);
}

Извлечь (распаковать) указанный файл из zip-архива в указанную директорию

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  ZipEntry e = zip["MyReport.doc"];
  e.Extract(TargetDirectory);
}

Извлечь (распаковать) все файлы из zip-архива в указанную директорию

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry e in zip)
  {
    e.Extract(TargetDirectory, ExtractExistingFileAction.OverwriteSilently); // перезаписывать существующие
  }
}

Распаковка зашифрованного (запароленного) zip архива

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry e in zip)
  {
    e.ExtractWithPassword(TargetDirectory, ExtractExistingFileAction.OverwriteSilently, Password);
  }
}

Остальные примеры можно найти в документации к библиотеке, которая есть вместе с релизами.

Категория: C#, C++

Комментарии к статье:

13.12.18   Гость Хорошая статья

Добавить комментарий: