Файловая работа с архивами
Для работы с ZIP-архивом как файлом предназначен тип ФайлZip. Вы можете получить экземпляр этого типа с помощью конструктора, которому в качестве параметра нужно передать путь к файлу архива. После завершения работы с а рхивом закрывать экземпляр ФайлZip не надо, все изменения архива сразу сохраняются на диск.
Изменение архива
ФайлZip имеет несколько методов для изменения архива:
- Добавить(Строка | Файл)— добавляет в архив файл (по его пути или сам файл). Если путь указывает на каталог, добавляет каталог и его содержимое.
- Добавить(ПотокЧтения)— добавляет в архив содержимое потока.
- Удалить()— удаляет из архива файл или каталог со всем его содержимым.
- УстановитьКомментарий()— устанавливает комментарий к архиву.
- ПолучитьКомментарий()— возвращает комментарий к архиву.
Пример добавления файлов в ZIP-архив
метод ЗаписатьСШифрованием()
    // Создадим экземпляр ФайлZip для работы с архивом.
    // Благодаря паролю можно распаковывать файлы, если архив уже существует и файлы зашифрованы, а также добавлять
    // новые файлы в зашифрованном виде. Метод шифрования по умолчанию — МетодШифрованияZip.Zip20
    пер Архив = новый ФайлZip(Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "/archive.zip", "password") 
 
    // Для новых файлов установим максимальный уровень сжатия, иначе значение будет Нормальный
    пер УровеньСжатияПоУмолчанию = УровеньСжатияZip.Максимальный 
    // Для новых файлов установим метод шифрования (так как открыли архив с паролем),
    // иначе значение будет Zip20
    пер МетодШифрованияПоУмолчанию = МетодШифрованияZip.Aes256 
     
    // Добавим папку с файлами
    Архив.Добавить(Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "/ПапкаСФайламиДляСжатия",
                   УровеньСжатия = УровеньСжатияПоУмолчанию, МетодШифрования = МетодШифрованияПоУмолчанию) 
     
    пер ФайлДляСжатия = новый Файл("ФайлДляСжатия.txt", 
                                   Файлы.ПолучитьДомашнийКаталогПользователя())
 
    // Добавим файл в корень архива
    Архив.Добавить(ФайлДляСжатия, УровеньСжатия = УровеньСжатияПоУмолчанию, 
                   МетодШифрования = МетодШифрованияПоУмолчанию) 
    
    // Можем также добавить файл через поток
    Архив.Добавить(ФайлДляСжатия.ОткрытьПотокЧтения(), "ПапкаСФайламиДляСжатия/ФайлДляСжатия_Копия", 
                           УровеньСжатия = УровеньСжатияПоУмолчанию, МетодШифрования = МетодШифрованияПоУмолчанию) 
    Архив.УстановитьКомментарий("Архив с ПапкаСФайламиДляСжатия и файлом. Сделана копия. Пароль: password")
     
    // Закрывать Архив не нужно, все изменения сразу сохраняются на диск.
;
Пример поиска и перезаписи файла в архиве
метод НайтиИПереписатьФайл(ПутьКАрхиву: Строка, ИмяФайла: Строка, НовыеДанные: ПотокЧтения)
    пер Архив = новый ФайлZip(ПутьКАрхиву)
 
     // Попробуем найти файл, который надо перезаписать, по имени
    пер Элементы = Архив.Найти(ИмяФайла) 
    если Элементы.Размер() > 1
        // Если найдено несколько файлов с таким именем, выбросим исключение
        выбросить новый ИсключениеНедопустимыйАргумент("Найдено несколько файлов с таким именем. Уточните путь к искомому файлу.")
    ;
 
    пер ИскомыйЭлемент = Элементы.Получить(0)
    пер ПутьКЭлементуВАрхиве = ИскомыйЭлемент.ПутьВАрхиве
     
    // Заменяем файл
    Архив.Удалить(ИскомыйЭлемент)
    Архив.Добавить(НовыеДанные, ПутьКЭлементуВАрхиве, УровеньСжатияZip.Максимальный)
; 
Распаковка архива
ФайлZip поддерживает следующие методы для чтения содержимого архива:
- ИзвлечьВсе(Строка | Файл)) — распаковывает весь архив в указанный каталог.
- Извлечь(ЭлементZip | Строка)— распаковывает элемент архива в указанный каталог.
- Найти()— ищет все элементы архива по указанной подстроке, содержащейся в пути.
- ЕстьЗашифрованныеФайлы()— возвращает- Истина, если хотя бы один элемент архива зашифрован.
- Элементы()— возвращает все элементы архива.
Если имена файлов внутри архива сохранены не в кодировке UTF-8, вы можете указать нужную кодировку, используя параметр КодировкаИменФайлов конструктора ФайлZip. Это позволит вам избежать появления нечитаемых символов в именах файлов и путей к ним при распаковке архива.
Подробнее о поддерживаемых кодировках
Пример извлечения файлов из архива
метод РаспаковатьАрхив(Путь: Строка)
    // Создадим экземпляр ФайлZip для работы с архивом.
    // Если архив зашифрован, укажите пароль для распаковки архива.
    // Укажите кодировку имен файлов в архиве, если она отлична от UTF-8.
    пер Aрхив = новый ФайлZip(Путь, "password", Кодировка.Windows1251)
    
    пер МестоНазначения = Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "\\Documents"
    
    // Извлечем один файл
    Aрхив.Извлечь("ИмяФайла", МестоНазначения)
    
    // Извлечем все файлы
    Aрхив.ИзвлечьВсе(МестоНазначения)
;