Работа с архивами формата 7z и zip с помощью библиотеки SevenZipSharp

Библиотека SevenZipSharp является оболочкой для работы с API архиватора 7zip в среде .NET. Она позволяет создавать как «обычные» так и зашифрованные архивы форматов 7z и zip, а также выполнять их распаковку.

Важно отметить, что статья не ставит своей целью создания полноценной документации по данной библиотеке, поэтому в ней описано только главное, что необходимо знать о работе с ней.

Библиотека содержит два класса, назначение которых в принципе понятно из их названия.

  • SevenZipCompressor – архивирование;
  • SevenZipExtractor – распаковка архивов.

О классе SevenZipExtractor необходимо сказать особо.

К сожалению, как и любая другая оболочка, эта библиотека не может выполнять свои функции самостоятельно. Поэтому в самом начале требуется указать местоположение самого архиватора 7zip (библиотеки 7z.dll).

Делается это с помощью статического метода SetLibraryPath класса SevenZipExtractor. Например:

После того как путь к библиотеке 7z.dll указан, можно приступать непосредственно к работе с архивами.

Создание архива

В начале указываем полный путь к архивируемому файлу или создаём массив из полных путей к файлам, если планируется упаковать в архив сразу несколько.

Далее создаём объект класса SevenZipCompressor и указываем формат архива (SevenZip или Zip).

Далее указываем режим архивации.

  • Create – создаётся новый файл архива. Существующий файл с таким же именем будет перезаписан;
  • Append – добавление новых файлов в уже существующий архив.

После этого выполняем непосредственно саму архивацию с помощью метода CompressFiles.

  • Первый параметр – путь к файлу архива;
  • Второй параметр путь к архивируемому файлу или массив из путей.

Ниже показан пример создания архива, который содержит два текстовых файла:

Особенности создания зашифрованных архивов

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

Помимо Aes256 также доступны алгоритмы: Zip, Aes128 и Aes192.

Далее при необходимости зашифровать имена файлов в архиве присваиваем свойству EncryptHeaders значение true.

Данное свойство имеет значение по умолчанию false. Поэтому, если шифровать имена файлов не требуется, значение этому свойству в коде можно принудительно не присваивать.

Вследствие имеющихся недоработок шифрование имён файлов происходи только для архивов формата 7z, только при создании архива и только при передаче имён архивируемых файлов в виде массива.Возможно, впоследствии разработчики исправят эту ошибку.

Сама же архивация выполняется с помощью метода CompressFilesEncrypted.

  • Первый параметр – путь к файлу архива;
  • Второй параметр – пароль к архиву;
  • Третий параметр – путь к архивируемому файлу или массив из путей.
Распаковка архива

Распаковка архива производится значительно проще, чем его создание.

Для этого необходимо создать объект класса SevenZipExtractor с указанием полного пути к файлу архива и вызвать метод ExtractArchive с указанием полного пути к папке, в которую будет распаковано его содержимое. В случае передачи пустой строки, содержимое архива распаковывается в корневой каталог жёсткого диска.

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

  • Первый параметр метода ExtractFiles, это папка для извлечения файлов. При передачи пустой строки файлы распаковываются в корневой каталог жёсткого диска;
  • Второй параметр – массив с именами извлекаемых файлов.

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

Особенности распаковки зашифрованных архивов

Как уже отмечалось выше, распаковать архив, гораздо проще, чем его создать.

Для распаковки зашифрованного архива, при создании объекта класса SevenZipExtractor, помимо полного пути к файлу архива, дополнительно указывается пароль к нему.

В остальном распаковка зашифрованного архива ничем не отличается от распаковки обычного.


Несмотря на то, что библиотека SevenZipSharp это всего лишь оболочка, и она пока ещё имеет ряд недоработок, в целом она представляет собой удобное и эффективное средство для решения задач связанных с обработкой архивов формата 7z или zip в .NET.

Ссылки

Официальная страница SevenZipSharp на CodePlex

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *