ЭлементZip
Стд::Архивация::ЭлементZip Базовые типы: Объект |
Иерархия типа
graph BT;
ЭлементZip-->Объект;
Описание элемента в ZIP-файле.
Сравнение ссылочное
См. также
Свойства
ВремяИзменения
ТолькоЧтение ВремяИзменения: Момент |
Момент изменения файла.
Примеры
метод ИзвлечьФайлыПоРасширениюИзАрхива(Архив: ФайлZip, РасширениеФайла: Строка, КаталогРаспаковки: Строка)
// Распаковка элементов архива с расширением РасширениеФайла, измененных за последние сутки,
// в домашний каталог КаталогРаспаковки и подкаталог РасширениеФайла,
// например, файлы с расширением "pdf", в каталог "КаталогРаспаковки/pdf"
для Элемент из Архив.Элементы()
если Элемент.Расширение == РасширениеФайла и Элемент.ВремяИзменения >= Момент.Сейчас() - 1д
Архив.Извлечь(Элемент, новый Файл(Файлы.ПолучитьДомашнийКаталог().Путь, [КаталогРаспаковки, РасширениеФайла]))
;
;
;
Имя
ТолькоЧтение Имя: Строка |
Имя элемента архива. Если при создании архива не использовалась кодировка UTF-8
для имен элементов архива, то будет использована кодировка указанная при создании читателя архива, или Cp866
.
Примеры
метод ПолучитьИменаЭлементовАрхива(Архив: ФайлZip): Массив<Строка>
пер ИменаЭлементов: Массив<Строка> = Архив.Элементы().Преобразовать(Элемент -> Элемент.Имя)
возврат ИменаЭлементов
;
ИмяБезРасширения
ТолькоЧтение ИмяБезРасширения: Строка |
Имя элемента архива без расширения. Если при создании архива не использовалась кодировка UTF-8
для имен элементов архива, то будет использована кодировка указанная при создании читателя архива, или Cp866
.
Примеры
метод ИзвлечьФайлСНовымРасширением(Архив: ФайлZip, ИмяФайла: Строка, КаталогРаспаковки: Строка)
// Поиск файла - точный путь к файлу в архиве неизвестен, но известно имя файла
пер Элементы = Архив.Найти(ИмяФайла)
// Извлечение найденных файлов в каталог КаталогРаспаковки с заменой расширения на "doc",
// например, файл test.bin будет извлечен как test.doc
пер Каталог = новый Файл(Файлы.ПолучитьДомашнийКаталог().Путь, [КаталогРаспаковки])
для Элемент из Элементы
если не Элемент.ЭтоКаталог()
Архив.Извлечь(Элемент, Каталог)
Файлы.Переименовать(новый Файл(Элемент.ПутьВАрхиве, Каталог), Элемент.ИмяБезРасширения + ".doc")
;
;
;
ПутьВАрхиве
ТолькоЧтение ПутьВАрхиве: Строка |
Путь к элементу в архиве. Если при создании архива не использовалась кодировка UTF-8
для имен элементов архива, то будет использована кодировка указанная при создании читателя архива, или Cp866
.
Примеры
метод ПолучитьПутиЭлементовАрхива(Архив: ФайлZip): Массив<Строка>
пер ПутиЭлементов: Массив<Строка> = Архив.Элементы().Преобразовать(Элемент -> Элемент.ПутьВАрхиве)
возврат ПутиЭлементов
;
метод ВычислитьРазмерСжатогоВАрхиве(Архив: ФайлZip, Каталог: Строка): РазмерБайтов
// Вычисление общего размера сжатых файлов в каталоге архива, например, "КаталогСФайламиДляСжатия"
пер ОбщийРазмерБайтов = 0б
для Элемент из Архив.Элементы()
если Элемент.ПутьВАрхиве.Содержит(Каталог, Истина)
ОбщийРазмерБайтов += Элемент.РазмерСжатого
;
;
возврат ОбщийРазмерБайтов
;
метод РаспаковатьАрхив(КаталогРаспаковки: Файл, ВходнойАрхив: Файл, Пароль: Строка)
// Создание потока чтения файла архива
исп АрхивПотокЧтения = ВходнойАрхив.ОткрытьПотокЧтения()
пер ЧтениеZip = новый ЧтениеZip(АрхивПотокЧтения, Пароль)
пока ЧтениеZip.Следующий()
// Получение элемента архива
пер ЭлементZip = ЧтениеZip.ПолучитьЭлемент()
если не ЭлементZip.ЭтоКаталог()
// Создание объекта файла, в который будет выполнена распаковка элемента архива.
// ПутьВАрхиве содержит полный путь со всеми каталогами и именем файла, все каталоги будут созданы,
// поэтому пропускаются элементы архива, которые являются каталогами
пер Файл = Файлы.Создать(новый Файл(КаталогРаспаковки.Путь, [ЭлементZip.ПутьВАрхиве]))
// Открытие потока записи, будет закрыт автоматически, так как объявлен через "исп"
исп ФайлПотокЗаписи = Файл.ОткрытьПотокЗаписи()
// Запись байтов элемента архива в поток записи целевого файла
ФайлПотокЗаписи.Записать(ЧтениеZip.ПолучитьПотокЭлемента().ПрочитатьКакБайты())
;
;
;
РазмерНесжатого
ТолькоЧтение РазмерНесжатого: РазмерБайтов |
Размер несжатого файла.
Примеры
метод ВычислитьРазмерНесжатогоВАрхиве(Архив: ФайлZip): РазмерБайтов
// Вычисление общего размера несжатых файлов в архиве
пер ОбщийРазмерБайтов = 0б
для Элемент из Архив.Элементы()
ОбщийРазмерБайтов += Элемент.РазмерНесжатого
;
возврат ОбщийРазмерБайтов
;
РазмерСжатого
ТолькоЧтение РазмерСжатого: РазмерБайтов |
Размер сжатого файла.
Примеры
метод ВычислитьРазмерСжатогоВАрхиве(Архив: ФайлZip, Каталог: Строка): РазмерБайтов
// Вычисление общего размера сжатых файлов в каталоге архива, например, "КаталогСФайламиДляСжатия"
пер ОбщийРазмерБайтов = 0б
для Элемент из Архив.Элементы()
если Элемент.ПутьВАрхиве.Содержит(Каталог, Истина)
ОбщийРазмерБайтов += Элемент.РазмерСжатого
;
;
возврат ОбщийРазмерБайтов
;
Расширение
ТолькоЧтение Расширение: Строка |
Расширение элемента архива.
Примеры
метод ИзвлечьФайлыПоРасширениюИзАрхива(Архив: ФайлZip, РасширениеФайла: Строка, КаталогРаспаковки: Строка)
// Распаковка элементов архива с расширением РасширениеФайла, измененных за последние сутки,
// в домашний каталог КаталогРаспаковки и подкаталог РасширениеФайла,
// например, файлы с расширением "pdf", в каталог "КаталогРаспаковки/pdf"
для Элемент из Архив.Элементы()
если Элемент.Расширение == РасширениеФайла и Элемент.ВремяИзменения >= Момент.Сейчас() - 1д
Архив.Извлечь(Элемент, новый Файл(Файлы.ПолучитьДомашнийКаталог().Путь, [КаталогРаспаковки, РасширениеФайла]))
;
;
;
Методы
Зашифрован
Зашифрован(): Булево
Возвращает признак того, что файл зашифрован.
Примеры
метод УдалитьЗашифрованныеФайлыВАрхиве(Архив: ФайлZip)
// Удаление всех зашифрованных файлов в архиве
если Архив.ЕстьЗашифрованныеФайлы()
Архив.Элементы()
.Фильтровать(Элемент -> не Элемент.ЭтоКаталог() и Элемент.Зашифрован())
.ДляКаждого(Элемент -> Архив.Удалить(Элемент))
;
;
Сжат
Сжат(): Булево
Возвращает признак сжатия элемента.
ЭтоКаталог
ЭтоКаталог(): Булево
Возвращает признак того, что элемент является каталогом.
Примеры
метод РаспаковатьАрхив(КаталогРаспаковки: Файл, ВходнойАрхив: Файл, Пароль: Строка)
// Создание потока чтения файла архива
исп АрхивПотокЧтения = ВходнойАрхив.ОткрытьПотокЧтения()
пер ЧтениеZip = новый ЧтениеZip(АрхивПотокЧтения, Пароль)
пока ЧтениеZip.Следующий()
// Получение элемента архива
пер ЭлементZip = ЧтениеZip.ПолучитьЭлемент()
если не ЭлементZip.ЭтоКаталог()
// Создание объекта файла, в который будет выполнена распаковка элемента архива.
// ПутьВАрхиве содержит полный путь со всеми каталогами и именем файла, все каталоги будут созданы,
// поэтому пропускаются элементы архива, которые являются каталогами
пер Файл = Файлы.Создать(новый Файл(КаталогРаспаковки.Путь, [ЭлементZip.ПутьВАрхиве]))
// Открытие потока записи, будет закрыт автоматически, так как объявлен через "исп"
исп ФайлПотокЗаписи = Файл.ОткрытьПотокЗаписи()
// Запись байтов элемента архива в поток записи целевого файла
ФайлПотокЗаписи.Записать(ЧтениеZip.ПолучитьПотокЭлемента().ПрочитатьКакБайты())
;
;
;