Предназначен для описания элемента в ZIP-файле. В именах файлов и папок в архиве запрещено использование символов: > < | ? * / \ : ". Такие символы будут заменены на символ подчеркивания "_". При этом свойства ИсходноеИмя, ИсходноеПолноеИмя, ИсходноеИмяБезРасширения, ИсходноеРасширение, ИсходныйПуть будут содержать немодифицированные значения. Если в архиве имена файлов дублируются, платформа устранит дублирование при работе с файлами, обеспечив уникальность имен файлов в архиве.
Полное описание, параметры и ограничения
ЭлементZipФайла (ZipFileEntry)
ЭлементZipФайла (ZipFileEntry)
Не рекомендуется использовать, начиная с версии 8.3.26.
Рекомендуется использовать:
ЭлементФайлаАрхива
Доступен, начиная с версии 8.0.
Свойства:
ВремяИзменения (Modified)
Зашифрован (Encrypted)
Имя (Name)
ИмяБезРасширения (BaseName)
ИсходноеИмя (OriginalName)
ИсходноеИмяБезРасширения (OriginalBaseName)
ИсходноеПолноеИмя (OriginalFullName)
ИсходноеРасширение (OriginalExtension)
ИсходныйПуть (OriginalPath)
Невидимый (Hidden)
ПолноеИмя (FullName)
Путь (Path)
РазмерНесжатого (UncompressedSize)
РазмерСжатого (CompressedSize)
Расширение (Extension)
ТолькоЧтение (ReadOnly)
Описание:
Предназначен для описания элемента в ZIP-файле.
В именах файлов и папок в архиве запрещено использование символов: > < | ? * / \ : ". Такие символы будут заменены на символ подчеркивания "_".
При этом свойства ИсходноеИмя, ИсходноеПолноеИмя, ИсходноеИмяБезРасширения, ИсходноеРасширение, ИсходныйПуть будут содержать немодифицированные значения.
Если в архиве имена файлов дублируются, платформа устранит дублирование при работе с файлами, обеспечив уникальность имен файлов в архиве.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
ЭлементыZipФайла
ЧтениеZipФайла, метод Извлечь
ЭлементыZipФайла, метод Найти
ЭлементыZipФайла, метод Получить
Использование в версии:
Доступен, начиная с версии 8.0.
Не рекомендуется использовать, начиная с версии 8.3.26.
Описание изменено в версии 8.3.26.
Методическая информация
Практические примеры
Разобрать существующий стиль кода на ЗаписьZipФайла
От исходного текста до архива и обратно: уникальная учебная папка, один файл, инвентаризация и проверка извлечённого содержимого.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Это разбор старого ZIP API для сопровождения существующих модулей. В справке 8.5 его использование не рекомендуется с 8.3.26; для нового кода выбирайте ЗаписьФайлаАрхива и ЧтениеФайлаАрхива.
Запускайте только в учебной базе на Windows. Папка создаётся во временном каталоге с новым UUID; реальные архивы не используются.
В архив добавляется ровно sample.txt. Метод Добавить по умолчанию не сохраняет путь источника.
Не подменяйте учебный архив файлом из Интернета: для недоверенного архива нужна отдельная проверка путей и лимитов распаковки.
Корень = КаталогВременныхФайлов() + "1c-guide-" + Строка(Новый УникальныйИдентификатор) + "\";
КаталогРезультата = Корень + "out\";
ИсходныйФайл = Корень + "sample.txt";
ИмяАрхива = Корень + "sample.zip";
ИзвлеченныйФайл = КаталогРезультата + "sample.txt";
ЗаписьАрхива = Неопределено;
ЧтениеАрхива = Неопределено;
СоздатьКаталог(КаталогРезультата);
Попытка
Документ = Новый ТекстовыйДокумент;
Документ.УстановитьТекст("Книга: 3");
Документ.Записать(ИсходныйФайл, КодировкаТекста.UTF8);
ЗаписьАрхива = Новый ЗаписьZipФайла(ИмяАрхива);
ЗаписьАрхива.Добавить(ИсходныйФайл);
ЗаписьАрхива.Записать();
ЗаписьАрхива = Неопределено;
ЧтениеАрхива = Новый ЧтениеZipФайла(ИмяАрхива);
Сообщить(ЧтениеАрхива.Комментарий);
Элементы = ЧтениеАрхива.Элементы;
Если Элементы.Количество() <> 1 Тогда
ВызватьИсключение "В учебном архиве ожидался один файл";
КонецЕсли;
Элемент = Элементы[0];
Сообщить("Имя: " + Элемент.Имя);
Сообщить("Без расширения: " + Элемент.ИмяБезРасширения);
Сообщить("Расширение: " + Элемент.Расширение);
Сообщить("Путь в архиве: " + Элемент.Путь);
Сообщить("Полное имя: " + Элемент.ПолноеИмя);
Сообщить("Исходное имя: " + Элемент.ИсходноеИмя);
Сообщить("Исходное имя без расширения: " + Элемент.ИсходноеИмяБезРасширения);
Сообщить("Исходное расширение: " + Элемент.ИсходноеРасширение);
Сообщить("Исходный путь: " + Элемент.ИсходныйПуть);
Сообщить("Исходное полное имя: " + Элемент.ИсходноеПолноеИмя);
Сообщить(СтрШаблон("До сжатия: %1; в архиве: %2", Элемент.РазмерНесжатого, Элемент.РазмерСжатого));
Сообщить(Формат(Элемент.ВремяИзменения, "ДФ=yyyy-MM-dd HH:mm:ss"));
Сообщить(СтрШаблон("Шифрование: %1; скрытый: %2; только чтение: %3", Элемент.Зашифрован, Элемент.Невидимый, Элемент.ТолькоЧтение));
Если Элемент.Имя <> "sample.txt" Или Элемент.Зашифрован Тогда
ВызватьИсключение "Неожиданный учебный элемент";
КонецЕсли;
ЧтениеАрхива.Извлечь(Элемент, КаталогРезультата);
ЧтениеАрхива.Закрыть();
ЧтениеАрхива = Неопределено;
Проверка = Новый ТекстовыйДокумент;
Проверка.Прочитать(ИзвлеченныйФайл, КодировкаТекста.UTF8);
Если Проверка.ПолучитьТекст() <> "Книга: 3" Тогда
ВызватьИсключение "Извлечённый текст отличается от исходного";
КонецЕсли;
Сообщить("Содержимое проверено");
Исключение
ТекстОшибки = ОписаниеОшибки();
Если ЧтениеАрхива <> Неопределено Тогда
ЧтениеАрхива.Закрыть();
КонецЕсли;
Если ЗаписьАрхива <> Неопределено Тогда
Попытка
ЗаписьАрхива.Записать();
Исключение
Сообщить("Не удалось завершить учебный архив; проверьте папку: " + Корень);
КонецПопытки;
КонецЕсли;
ВызватьИсключение ТекстОшибки;
КонецПопытки;
УдалитьФайлы(ИзвлеченныйФайл);
УдалитьФайлы(ИмяАрхива);
УдалитьФайлы(ИсходныйФайл);
Если НайтиФайлы(КаталогРезультата, "*", Истина).Количество() = 0 Тогда
УдалитьФайлы(КаталогРезультата);
КонецЕсли;
Если НайтиФайлы(Корень, "*", Истина).Количество() = 0 Тогда
УдалитьФайлы(Корень);
КонецЕсли;Разбор по шагам
Создаём папку с уникальным именем и сохраняем собственный sample.txt с известным содержимым.
Конструктор записи открывает новый архив; Добавить формирует состав, Записать завершает и закрывает архив.
Чтение возвращает коллекцию: после проверки количества берём индекс 0 и составляем инвентаризацию свойств элемента.
Извлекаем только проверенный sample.txt в отдельную подпапку, читаем UTF-8 и сравниваем с исходником.
При успехе удаляем три своих файла; папки удаляем только после проверки, что они пусты. При ошибке путь остаётся для диагностики.
Как проверить результат
Один элемент: sample.txt, имя без расширения sample, расширение txt; Зашифрован — Ложь.
После извлечения сообщение Содержимое проверено; содержимое ровно Книга: 3.
РазмерСжатого не обязан быть меньше РазмерНесжатого у такого короткого текста; это не ошибка.
При успешном запуске уникальная учебная папка удалена. При ошибке не удаляйте её без просмотра состава.
Ожидаемый результат
Собственный ZIP прошёл проверку состава и содержимого; рабочие файлы не затрагивались.
На что обратить внимание
Это разбор старого ZIP API для сопровождения существующих модулей. В справке 8.5 его использование не рекомендуется с 8.3.26; для нового кода выбирайте ЗаписьФайлаАрхива и ЧтениеФайлаАрхива.
Исходные имена — имена, записанные в архиве, а не обязательно абсолютный путь исходного файла на диске.
Не извлекайте недоверенные архивы в рабочий каталог: ограничения по суммарному размеру, количеству элементов и путям нужны до распаковки.
Запись архива может полностью заменить существующий файл. Здесь путь уникален. Простой повторный ВызватьИсключение сохраняет текст ошибки, но не первоначальный стек.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.