Link Search Menu Expand Document

ФайлZip

Стд::Архивация::ФайлZip
Базовые типы: Объект

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

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

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

Объект