Работа с ZIP-архивами в 1С

Категория: Учебники по 1С » Технологии интеграции 1С Предприятия 8.2

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

Для того чтобы записать файлы в ZIP-архив, необходимо выполнить несколько простых действий:

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

Рассмотрим эти действия на следующем примере:

 

Создание объекта ЗаписьZIРФайла можно осуществить двумя путями:
  • создать инициализированный объект
  • создать неинициализированный объект и вызвать у него метод Открыть () (файл архива не должен существовать в этом случае)
&НаКлиенте
Процедура ДобавлениеФайловВАрхив(Команда)
Архив = Новый ЗаписьZIPФайла("c:архив.zip", "", "", МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);
//Архив.Добавить("c:ZIP*.xls", 
//РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
//РежимОбработкиПодкаталоговZIP.НеОбрабатывать);
Архив.Добавить("c:ZIP*.xls", 
РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архив.Записать();
КонецПроцедуры
 

При создании нового архива (либо при создании конструктором, либо методом Открыть ()) требуется указать:

  • Имя файла, куда будет записан архив. Этот параметр является обязательным. Если такой файл уже существует на диске, он будет перезаписан (в момент вызова метода Записать ()).
  • Пароль доступа к архиву. Если этот параметр пропущен или равен пустой строке, то шифрование производиться не будет.
  • Комментарий к архиву.
  • Метод сжатия файлов в архиве. На выбор предоставляется возможность скопировать файлы в архив без сжатия или сжать их. По умолчанию файлы сжимаются.
  • Уровень сжатия файлов в архиве. Можно выбирать между минимальным, оптимальным и максимальным сжатием. По умолчанию используется оптимальное сжатие.
  • Метод шифрования. Можно защитить архив методом шифрования ZIP20, совместимым с большинством программ, или с помощью шифрования на основе новейшего стандарта AES с различной длиной ключа (128, 192 и 256 бит). Однако следует помнить, что данный метод может быть не совместим с некоторыми программами архивирования старых версий.

 

После создания объекта необходимо добавить в него сжимаемые файлы.

Для этой цели используется метод Добавить (). У него 3 параметра:

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

После того как все необходимые файлы добавлены, можно записать архив на диск, воспользовавшись методом Записать () .

Важно понимать, что до выполнения этого метода никаких реальных действий по созданию архива не происходит. После записи архива на диск объект закрывает его, и для работы со следующим архивом необходимо выполнить метод Открыть ().

 

Особенности упаковки файлов по маске

 Остановимся подробнее на особенностях упаковки файлов по маске.

Предположим, что у нас есть следующие файлы:

 

c:\ZIP\filel.xls

c:\ZIP\file2.xls

c:\ZIP\file.doc

c:\ZIP\Test\file3.xls

c:\ZIP\Test\file4.xls

 

Для упаковки всех этих файлов в архив можно воспользоваться следующим кодом (листинг 1.79).

Следует отметить, что относительные пути актуальны только при задании маски (значение СохранятьОтносительныеПути системного перечисления РежимСохраненияПутей().
В архив файлы попадут следующим образом:
c:\ZIP\filel.xls
\file3.xls
\file4.xls
Добавить файлы в архив можно и другим способом:
Архив.Добавить("c:\ZIP\*.xls", 
РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
РежимОбработкиПодкаталоговZIP.НеОбрабатывать);
В результирующий архив попадут следующие файлы:
\filel.xls \file2.xls
При создании архива можно включать файлы во вложенных каталогах 
&НаКлиенте
Процедура ДобавлениеФайловВАрхив(Команда)
Архив = Новый ЗаписьZIPФайла("c:\архив.zip", "", "", МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);
Архив.Добавить("c:\ZIP\*.xls", 
РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архив.Записать();
КонецПроцедуры

Особенности работы метода «Добавить()»

Упаковать файлы в архив можно несколькими способами в зависимости от того, какой результат необходим.
Упаковать некоторые файлы в папку ZIP с сохранением структуры каталогов.
Предположим, что у нас есть следующие файлы:
c:\ZIP\filel.xls
c: \ZIP\Test\file3.xls
Добавить их в архив можно, вызывая для каждого метод Добавить() с указанием требуемых параметров
В архив файлы попадут следующим образом:
\ZIP\filel.xls
\ZIP\Test\file3.xls
Упаковать все файлы в папку ZIP без сохранения структуры каталогов. Предположим, что у нас есть следующие файлы:
c:\ZIP\filel.xls c:\ZIP\Test\file3.xls
Для добавления всех файлов передадим в метод Добавить () маску для поиска всех файлов (*.*), скажем, что нет необходимости сохранять пути для файлов, и укажем, что требуется производить поиск в подпапках
Архив.Добавить("c:\ZIP\*.xls", 
РежимСохраненияПутейZIP.НеСохранятьПути,
РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
В архив файлы попадут следующим образом:
\-filel.xls
\file3.xls
При этом следует помнить, что если в разных папках будут файлы с одинако¬выми именами, то операция выполнена не будет из-за того, что фактически мы попытаемся добавить в архив файлы с одинаковыми именами.
Упаковать все файлы в папку ZIP с сохранением относительных путей.
Предположим, что у нас есть следующие файлы:
c:\ZIP\filel.xls
c:\ZIP\Test\file3.xls
Для добавления всех файлов передадим в метод Добавить () маску для поиска всех файлов (*.*), скажем, что необходимо сохранять относительные пути для файлов, и укажем, что требуется производить поиск в подпапках. При этом следует помнить, что относительные пути будут начинаться от папки, в которой начался поиск:
 Архив.Добавить("c:\ZIP\*.xls", 
РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
В архив файлы попадут следующим образом:
\filel.xls
\Test\file3.xls
dle

Помоги проекту! Расскажи друзьям о сайте: