Перейти к основному содержимому

ФайлZip

Стд::Архивация::ФайлZip

Объект для файловой работы с ZIP-архивом.

Методы выбрасывают исключения: ИсключениеВводаВывода - если произошли ошибки чтения/записи. ИсключениеДоступаКФайлу - при невозможности получить доступ к файлу архива.

Сравнение

Ссылочное

Иерархия типа​

Базовые типы: Объект


Примеры​

Общие примеры

метод ЗаписатьСШифрованием(ФайлДляСжатия: Файл)
// Создание объект взаимодействия с архивом
// Благодаря паролю можно распаковывать файлы (если архив уже существует и файлы зашифрованы) и добавлять новые в зашифрованном виде МетодШифрованияПоУмолчанию = МетодШифрованияZip.Zip20
пер Архив = новый ФайлZip(Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "/archive.zip", "password")

// Для новых файлов установим максимальный уровень сжатия, иначе значение будет Нормальный
пер УровеньСжатияПоУмолчанию = УровеньСжатияZip.Максимальный

// Для новых файлов установим метод шифрования, иначе значение будет Zip20 (так как открыли архив с паролем)
пер МетодШифрованияПоУмолчанию = МетодШифрованияZip.Aes256

// Добавим каталог с файлами
Архив.Добавить(Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "/КаталогСФайламиДляСжатия", "", УровеньСжатияПоУмолчанию, МетодШифрованияПоУмолчанию)

// Добавим в корень файл
Архив.Добавить(ФайлДляСжатия, "", УровеньСжатияПоУмолчанию, МетодШифрованияПоУмолчанию)

// Можем добавить через поток
Архив.Добавить(ФайлДляСжатия.ОткрытьПотокЧтения(), "КаталогСФайламиДляСжатия/ФайлДляСжатия_Копия", УровеньСжатияПоУмолчанию, Момент.Сейчас(), МетодШифрованияПоУмолчанию)
Архив.УстановитьКомментарий("Архив с КаталогСФайламиДляСжатия и файлом. Сделана копия. Пароль: password")

// Закрывать Архив или сохранять изменения не нужно, данные команды выполняются автоматически после каждого вызова метода объекта Архив
;

Конструкторы​

ФайлZip​

ФайлZip(
  Архив: Строка,
  Пароль: Секрет|Строка = "",
  КодировкаИменФайлов: Кодировка|Строка = Кодировка.Utf8)
Создает объект файловой работы с ZIP-архивом на основании пути к архиву Архив и пароля Пароль. КодировкаИменФайлов используется для распаковки существующих файлов в архиве, не для добавления новых файлов. Значение используется, если путь элемента архива не сохранен в utf8 кодировке внутри архива. Рекомендуется использовать в качестве пароля символы латинского алфавита и цифры для совместимости с другими архиваторами. Поддерживаются только архивы с элементами сжатыми по алгоритму Deflate или Store (без сжатия). Другие алгоритмы, в частности Deflate64 или BZip2, не поддерживаются. Если файл архива не существует, то он будет создан, отдельная команда не требуется. Если файл архива уже существует и удовлетворяет стандарту zip, то будет использоваться этот файл. Если файл уже существует, но является пустым или это не архив zip, то последующий вызов методов файла архива вернет ошибку.

Примеры​

метод СоздатьФайлАрхиваИДобавитьФайл(ИмяФайла: Строка, Пароль: Строка, ФайлДляСжатия: Файл): ФайлZip
// Создание объекта нового файла архива с именем ИмяФайла в домашнем каталоге и паролем Пароль
пер Архив = новый ФайлZip(Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "/" + ИмяФайла, Пароль)

попытка
Архив.Добавить(Источник = ФайлДляСжатия)
поймать И: Исключение
// обработка исключения в случае, если файл с переданным именем уже существует и не является валидным архивом zip
;

возврат Архив
;

Методы​

ВСтроку​

ВСтроку(): Строка

Переопределение
Объект::ВСтроку


Добавить​

Добавить(
  Источник: Файл|Строка,
  ПутьВАрхиве: Строка = "",
  УровеньСжатия: УровеньСжатияZip = УровеньСжатияZip.Нормальный,
  МетодШифрования: МетодШифрованияZip? = Неопределено)
Добавляет файл Источник в существующий архив по пути в архиве ПутьВАрхиве с уровнем сжатия УровеньСжатия и методом шифрования МетодШифрования. Если архива нет, то создает его. Для каталога добавляет в архив сам каталог и его содержимое.

Исключения​

ИсключениеНедопустимыйАргумент - если указан МетодШифрования, но объект создан без указания пароля.

Перегрузка
Добавить(Источник: ПотокЧтения, ПутьВАрхиве: Строка, УровеньСжатия: УровеньСжатияZip = УровеньСжатияZip.Нормальный, ВремяИзменения: Момент? = Неопределено, МетодШифрования: МетодШифрованияZip? = Неопределено)

Примеры​

метод ДобавитьФайлВАрхив(ФайлДляСжатия: Файл, Архив: ФайлZip)
// Добавление файла в архив с нормальным уровнем сжатия
Архив.Добавить(Источник = ФайлДляСжатия, УровеньСжатия = УровеньСжатияZip.Нормальный)
;

Добавить​

Добавить(
  Источник: ПотокЧтения,
  ПутьВАрхиве: Строка,
  УровеньСжатия: УровеньСжатияZip = УровеньСжатияZip.Нормальный,
  ВремяИзменения: Момент? = Неопределено,
  МетодШифрования: МетодШифрованияZip? = Неопределено)
Добавляет содержимое потока Источник в архив по данному пути ПутьВАрхиве с уровнем сжатия УровеньСжатия, временем изменения элемента ВремяИзменения и методом шифрования МетодШифрования. По умолчанию время изменения элемента - текущее на момент начала записи.

Исключения​

ИсключениеНедопустимыйАргумент - если указан МетодШифрования, но объект создан без указания пароля.

Перегрузка
Добавить(Источник: Файл|Строка, ПутьВАрхиве: Строка = "", УровеньСжатия: УровеньСжатияZip = УровеньСжатияZip.Нормальный, МетодШифрования: МетодШифрованияZip? = Неопределено)

Примеры​

метод ДобавитьФайлВАрхив(ФайлДляСжатияПоток: ПотокЧтения, Архив: ФайлZip, ФайлПутьВАрхиве: Строка)
// Добавление файла через поток чтения в архив с максимальным уровнем сжатия, путь передается в параметре ПутьВАрхиве, например, "КаталогСФайламиДляСжатия/ИмяФайла.txt"
Архив.Добавить(Источник = ФайлДляСжатияПоток, ПутьВАрхиве = ФайлПутьВАрхиве, УровеньСжатия = УровеньСжатияZip.Максимальный)
;

ЕстьЗашифрованныеФайлы​

ЕстьЗашифрованныеФайлы(): Булево
Возвращает признак зашифрованности архива. Архив считается зашифрованным, если хотя бы один файл-элемент зашифрован.

Примеры​

метод УдалитьЗашифрованныеФайлыВАрхиве(Архив: ФайлZip)
// Удаление всех зашифрованных файлов в архиве
если Архив.ЕстьЗашифрованныеФайлы()
Архив.Элементы()
.Фильтровать(Элемент -> не Элемент.ЭтоКаталог() и Элемент.Зашифрован())
.ДляКаждого(Элемент -> Архив.Удалить(Элемент))
;
;

Извлечь​

Извлечь(
  Элемент: ЭлементZip|Строка,
  МестоНазначения: Файл|Строка)
Распаковывает элемент архива Элемент по пути МестоНазначения.

Примеры​

метод ИзвлечьФайлИзАрхива(Архив: ФайлZip, ФайлПутьВАрхиве: Строка, КаталогРаспаковки: Строка)
// Распаковка файла в каталог, например, "КаталогСФайламиДляСжатия/ИмяФайла.txt" в "КаталогРаспаковки" домашнего каталога
Архив.Извлечь(ФайлПутьВАрхиве, Файлы.ПолучитьДомашнийКаталогПользователя().Путь + "/" + КаталогРаспаковки)
;
метод ИзвлечьФайлыПоРасширениюИзАрхива(Архив: ФайлZip, РасширениеФайла: Строка, КаталогРаспаковки: Строка)
// Распаковка элементов архива с расширением РасширениеФайла, измененных за последние сутки,
// в домашний каталог КаталогРаспаковки и подкаталог РасширениеФайла,
// например, файлы с расширением "pdf", в каталог "КаталогРаспаковки/pdf"
для Элемент из Архив.Элементы()
если Элемент.Расширение == РасширениеФайла и Элемент.ВремяИзменения >= Момент.Сейчас() - 1д
Архив.Извлечь(Элемент, новый Файл(Файлы.ПолучитьДомашнийКаталогПользователя().Путь, [КаталогРаспаковки, РасширениеФайла]))
;
;
;

ИзвлечьВсе​

ИзвлечьВсе(
  МестоНазначения: Файл|Строка,
  ВосстанавливатьКаталоги: Булево = Истина)
Распаковывает весь архив по пути МестоНазначения. Если ВосстанавливатьКаталоги == Ложь, то распакуются только файлы. Файлы с одинаковыми именами перезаписывают друг друга в порядке следования родительских элементов (каталогов) по алфавиту

Исключения​

ИсключениеДоступаКФайлу - при невозможности получить доступ к файлу архива или месту назначения.

Примеры​

// Исходная структура архива, имена файлов отличаются (1)
// a/test1.txt
// b/test2.txt
// c/test3.txt
// c/a/test4.txt

// Исходная структура архива, имена файлов совпадают (2)
// a/test.txt
// b/test.txt
// c/test.txt
// c/a/test.txt

метод ИзвлечьВсеСКаталогами(Архив: ФайлZip, КаталогНазначения: Строка)
// Распаковка всех элементов архива в каталог КаталогНазначения, с восстановлением структуры каталогов из архива
Архив.ИзвлечьВсе(КаталогНазначения)

// Результат (1)
// a/test1.txt
// b/test2.txt
// c/test3.txt
// c/a/test4.txt

// Результат (2)
// a/test.txt
// b/test.txt
// c/test.txt
// c/a/test.txt
;

метод ИзвлечьВсеБезКаталогов(Архив: ФайлZip, КаталогНазначения: Строка)
// Распаковка всех элементов архива в каталог КаталогНазначения, без восстановления структуры каталогов из архива
Архив.ИзвлечьВсе(КаталогНазначения, Ложь)

// Результат (1)
// test1.txt
// test2.txt
// test3.txt
// test4.txt

// Результат (2)
// test.txt (из каталога c/a/)
;

Найти​

Возвращает все элементы архива, в которых содержится подстрока ЧастьПути. При этом разделители в пути не важны. Регулярный выражения не поддерживаются.

Примеры​

метод НайтиИПереписатьФайл(ПутьКАрхиву: Строка, ИмяФайла: Строка, НовыеДанные: ПотокЧтения)
пер Архив = новый ФайлZip(ПутьКАрхиву)

// Поиск файла - точный путь к файлу в архиве неизвестен, но известно имя файла
пер Элементы = Архив.Найти(ИмяФайла)
если Элементы.Размер() != 1
выбросить новый ИсключениеНедопустимыйАргумент()
;

пер ИскомыйЭлемент = Элементы.Получить(0)

// Замена файла
Архив.Удалить(ИскомыйЭлемент)
Архив.Добавить(НовыеДанные, ИскомыйЭлемент.ПутьВАрхиве, УровеньСжатияZip.Максимальный)
;

ПолучитьКомментарий​

ПолучитьКомментарий(): Строка
Возвращает комментарий к архиву.


Удалить​

Удалить(Элемент: ЭлементZip|Строка)
Удаляет элемент Элемент из архива. При использовании удаления через строковой путь к элементу разделители не важны. Для каталогов в архиве будут удалены все подкаталоги и файлы.

Исключения​

ИсключениеВводаВывода - если элемент не найден.

Примеры​

метод УдалитьФайлВАрхиве(Архив: ФайлZip, ФайлПутьВАрхиве: Строка)
// Удаление файла в архиве по его пути ФайлПутьВАрхиве, например, "КаталогСФайламиДляСжатия/ИмяФайла.txt"
Архив.Удалить(ФайлПутьВАрхиве)
;

метод УдалитьКаталогВАрхиве(Архив: ФайлZip, КаталогПутьВАрхиве: Строка)
// Удаление каталога и его содержимого в архиве по его пути КаталогПутьВАрхиве, например, "КаталогСФайламиДляСжатия"
Архив.Удалить(КаталогПутьВАрхиве)
;

УстановитьКомментарий​

УстановитьКомментарий(Комментарий: Строка)
Устанавливает комментарий Комментарий к архиву.


Элементы​

Возвращает все элементы zip архива.

Примеры​

метод ВычислитьРазмерНесжатогоВАрхиве(Архив: ФайлZip): РазмерБайтов
// Вычисление общего размера несжатых файлов в архиве
пер ОбщийРазмерБайтов = 0б
для Элемент из Архив.Элементы()
ОбщийРазмерБайтов += Элемент.РазмерНесжатого
;
возврат ОбщийРазмерБайтов
;
метод ВычислитьРазмерСжатогоВАрхиве(Архив: ФайлZip, Каталог: Строка): РазмерБайтов
// Вычисление общего размера сжатых файлов в каталоге архива, например, "КаталогСФайламиДляСжатия"
пер ОбщийРазмерБайтов = 0б
для Элемент из Архив.Элементы()
если Элемент.ПутьВАрхиве.Содержит(Каталог, Истина)
ОбщийРазмерБайтов += Элемент.РазмерСжатого
;
;
возврат ОбщийРазмерБайтов
;

Список унаследованных методов​

Объект​

ВСтроку (Переопределение)

ПолучитьТип

Представление