Link Search Menu Expand Document

ЭлементZip

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

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

graph BT;
ЭлементZip-->Объект;

Описание элемента в ZIP-файле.

Сравнение ссылочное


См. также

ФайлZip, ЧтениеZip


Свойства

ВремяИзменения

ТолькоЧтение ВремяИзменения: Момент

Момент изменения файла.

Примеры

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

Имя

ТолькоЧтение Имя: Строка

Имя элемента архива. Если при создании архива не использовалась кодировка UTF-8 для имен элементов архива, то будет использована кодировка указанная при создании читателя архива, или Cp866.

Примеры

метод ПолучитьИменаЭлементовАрхива(Архив: ФайлZip): Массив<Строка>
	пер ИменаЭлементов: Массив<Строка> = Архив.Элементы().Преобразовать(Элемент -> Элемент.Имя)
	возврат ИменаЭлементов
;

ИмяБезРасширения

ТолькоЧтение ИмяБезРасширения: Строка

Имя элемента архива без расширения. Если при создании архива не использовалась кодировка UTF-8 для имен элементов архива, то будет использована кодировка указанная при создании читателя архива, или Cp866.

Примеры

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

ПутьВАрхиве

ТолькоЧтение ПутьВАрхиве: Строка

Путь к элементу в архиве. Если при создании архива не использовалась кодировка UTF-8 для имен элементов архива, то будет использована кодировка указанная при создании читателя архива, или Cp866.

Примеры

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

РазмерНесжатого

ТолькоЧтение РазмерНесжатого: РазмерБайтов

Размер несжатого файла.

Примеры

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

РазмерСжатого

ТолькоЧтение РазмерСжатого: РазмерБайтов

Размер сжатого файла.

Примеры

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

Расширение

ТолькоЧтение Расширение: Строка

Расширение элемента архива.

Примеры

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

Методы

Зашифрован

Зашифрован(): Булево

Возвращает признак того, что файл зашифрован.

Примеры

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

Сжат

Сжат(): Булево

Возвращает признак сжатия элемента.


ЭтоКаталог

ЭтоКаталог(): Булево

Возвращает признак того, что элемент является каталогом.

Примеры

метод РаспаковатьАрхив(КаталогРаспаковки: Файл, ВходнойАрхив: Файл, Пароль: Строка)
    // Создание потока чтения файла архива
    исп АрхивПотокЧтения = ВходнойАрхив.ОткрытьПотокЧтения()
    пер ЧтениеZip = новый ЧтениеZip(АрхивПотокЧтения, Пароль)
        
    пока ЧтениеZip.Следующий()
        // Получение элемента архива
        пер ЭлементZip = ЧтениеZip.ПолучитьЭлемент()
        
        если не ЭлементZip.ЭтоКаталог()
            // Создание объекта файла, в который будет выполнена распаковка элемента архива.
            // ПутьВАрхиве содержит полный путь со всеми каталогами и именем файла, все каталоги будут созданы,
            // поэтому пропускаются элементы архива, которые являются каталогами
            пер Файл = Файлы.Создать(новый Файл(КаталогРаспаковки.Путь, [ЭлементZip.ПутьВАрхиве]))
            
            // Открытие потока записи, будет закрыт автоматически, так как объявлен через "исп"
            исп ФайлПотокЗаписи = Файл.ОткрытьПотокЗаписи()
            
            // Запись байтов элемента архива в поток записи целевого файла
            ФайлПотокЗаписи.Записать(ЧтениеZip.ПолучитьПотокЭлемента().ПрочитатьКакБайты())
        ;
    ;
;

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

Объект