ЗаписьZipФайла.ПолучитьДвоичныеДанные

Методы · GetBinaryData

Получает ZIP-архив в виде двоичных данных и закрывает файл. При использовании данного метода объект ЗаписьZipФайла должен быть создан с помощью конструктора без параметров. При этом открывать архив явно с помощью метода Открыть не требуется. При завершении работы данный метод закрывает архив, аналогично методу Записать.

Синтаксис

ПолучитьДвоичныеДанные(<Пароль>, <Комментарий>, <МетодСжатия>, <УровеньСжатия>, <МетодШифрования>)
Полное описание, параметры и ограничения

ЗаписьZipФайла.ПолучитьДвоичныеДанные (ZipFileWriter.GetBinaryData)

ЗаписьZipФайла (ZipFileWriter)

ПолучитьДвоичныеДанные (GetBinaryData)

Не рекомендуется использовать, начиная с версии 8.3.26.

Рекомендуется использовать:

ПолучитьДвоичныеДанные

Доступен, начиная с версии 8.3.10.

Синтаксис:
ПолучитьДвоичныеДанные(<Пароль>, <Комментарий>, <МетодСжатия>, <УровеньСжатия>, <МетодШифрования>)
Параметры:

<Пароль> (необязательный)
Тип: Строка.
Пароль, который будет назначен архиву.
Если пароль не назначен или является пустой строкой, то шифрование не происходит.

<Комментарий> (необязательный)
Тип: Строка.
Комментарий, описывающий ZIP-файл.

<МетодСжатия> (необязательный)
Тип: МетодСжатияZIP.
Метод сжатия, которым будет сжиматься архив.
Значение по умолчанию: Сжатие.

<УровеньСжатия> (необязательный)
Тип: УровеньСжатияZIP.
Уровень сжатия данных.
Значение по умолчанию: Оптимальный.

<МетодШифрования> (необязательный)
Тип: МетодШифрованияZIP.
Метод шифрования, которым будет зашифрован архив.
Значение по умолчанию: Zip20.
Возвращаемое значение:
Тип: ДвоичныеДанные.

Описание:

Получает ZIP-архив в виде двоичных данных и закрывает файл.
При использовании данного метода объект ЗаписьZipФайла должен быть создан с помощью конструктора без параметров.
При этом открывать архив явно с помощью метода Открыть не требуется.
При завершении работы данный метод закрывает архив, аналогично методу Записать.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.10.

Не рекомендуется использовать, начиная с версии 8.3.26.

Методическая информация

Практические примеры

Получить старый ZIP в памяти без открытого архивного файла

Упаковываем свой временный текст в двоичные данные, открываем поток архива и проверяем список файлов без распаковки.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Это разбор старого ZIP API для сопровождения существующих модулей. В справке 8.5 его использование не рекомендуется с 8.3.26; для нового кода выбирайте ЗаписьФайлаАрхива и ЧтениеФайлаАрхива.

  2. Добавить принимает путь к файлу, поэтому создаётся один уникальный временный источник. Сам архив остаётся в памяти.

  3. Для ПолучитьДвоичныеДанные создавайте запись без параметров и не вызывайте перед этим Открыть.


ИсходныйФайл = ПолучитьИмяВременногоФайла("txt");
Поток = Неопределено;
Чтение = Неопределено;
Попытка
    Документ = Новый ТекстовыйДокумент;
    Документ.УстановитьТекст("Учебный пакет");
    Документ.Записать(ИсходныйФайл, КодировкаТекста.UTF8);
    Запись = Новый ЗаписьZipФайла;
    Запись.Добавить(ИсходныйФайл);
    ДанныеАрхива = Запись.ПолучитьДвоичныеДанные();
    Сообщить(ДанныеАрхива.Размер());
    Поток = ДанныеАрхива.ОткрытьПотокДляЧтения();
    Чтение = Новый ЧтениеZipФайла(Поток);
    Сообщить(Чтение.Элементы.Количество());
    Для Каждого Элемент Из Чтение.Элементы Цикл
        Сообщить(Элемент.Имя);
    КонецЦикла;
    Чтение.Закрыть();
    Чтение = Неопределено;
    Поток.Закрыть();
    Поток = Неопределено;
    // Второе открытие того же пакета через неинициализированное чтение.
    Поток = ДанныеАрхива.ОткрытьПотокДляЧтения();
    Чтение = Новый ЧтениеZipФайла;
    Чтение.Открыть(Поток);
    Если Чтение.Элементы.Количество() <> 1 Тогда
        ВызватьИсключение "Повторное чтение пакета не совпало";
    КонецЕсли;
    Чтение.Закрыть();
    Чтение = Неопределено;
    Поток.Закрыть();
    Поток = Неопределено;
    УдалитьФайлы(ИсходныйФайл);
Исключение
    Если Чтение <> Неопределено Тогда
        Чтение.Закрыть();
    КонецЕсли;
    Если Поток <> Неопределено Тогда
        Поток.Закрыть();
    КонецЕсли;
    УчебныйФайл = Новый Файл(ИсходныйФайл);
    Если УчебныйФайл.Существует() Тогда
        УдалитьФайлы(ИсходныйФайл);
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;

Разбор по шагам

  1. Сохраняем исходный текст в один собственный временный файл.

  2. Неинициализированная запись собирает пакет; ПолучитьДвоичныеДанные возвращает готовый архив и завершает запись.

  3. Открываем новый поток чтения двоичных данных и передаём его конструктору чтения архива.

  4. После проверки количества закрываем чтение и поток; повторяем проверку через Новый без параметров и Открыть. Удаляем источник.

Как проверить результат

  1. Размер пакета больше нуля; в коллекции ровно один элемент с расширением txt.

  2. Оба открытия возвращают количество 1. Исходный временный файл удалён.

  3. Не вызывайте ПолучитьДвоичныеДанные после конструктора записи по имени файла: это другой способ работы, запрещённый описанием данного метода.

Ожидаемый результат

Готовый архив хранится в ДвоичныеДанные; файловый архив не создаётся.

На что обратить внимание

  1. Это разбор старого ZIP API для сопровождения существующих модулей. В справке 8.5 его использование не рекомендуется с 8.3.26; для нового кода выбирайте ЗаписьФайлаАрхива и ЧтениеФайлаАрхива.

  2. Не закрывайте поток раньше объекта чтения архива. После завершения не используйте закрытые объекты.

  3. Для больших пакетов память ограничена; потоковый или файловый вариант выбирается исходя из объёма данных.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.