Тип: Строка. Содержит расширение файла.
Полное описание, параметры и ограничения
ЭлементZipФайла.Расширение (ZipFileEntry.Extension)
ЭлементZipФайла (ZipFileEntry)
Расширение (Extension)
Не рекомендуется использовать, начиная с версии 8.3.26.
Рекомендуется использовать:
Расширение
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: Строка.
Содержит расширение файла.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Не рекомендуется использовать, начиная с версии 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; для нового кода выбирайте ЗаписьФайлаАрхива и ЧтениеФайлаАрхива.
Исходные имена — имена, записанные в архиве, а не обязательно абсолютный путь исходного файла на диске.
Не извлекайте недоверенные архивы в рабочий каталог: ограничения по суммарному размеру, количеству элементов и путям нужны до распаковки.
Запись архива может полностью заменить существующий файл. Здесь путь уникален. Простой повторный ВызватьИсключение сохраняет текст ошибки, но не первоначальный стек.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.