Файловая работа с архивами
Для работы с 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рхив.ИзвлечьВсе(МестоНазначения)
;