<

1C: Объект для записи ZIP-архива в поток.

Войти
  1. mistergluck

    25-02-2021 17:53

    Всем привет, на сайте ИТС
    https://its.1c.ru/db/execobj202020#content:710:hdoc:записьzip-zipwriter
    Нашел такой метод: (но конфигуратор не понимает такой код, да и сам объект ЗаписьZip)
    Это планируется сделать в будущих версиях или что-то можно подключить, как в с# какую нибудь библиотеку

    ЗаписьZip (ZipWriter)
    Объект для записи ZIP-архива в поток.

    Пример
    метод СформироватьАрхив(Каталог: Файл, ВыходнойАрхив: Файл)
        исп ПотокЗаписи = ВыходнойАрхив.ОткрытьПотокЗаписи()
        пер ЗаписьZip = новый ЗаписьZip(ПотокЗаписи, "password",
            УровеньСжатияZip.Нормальный, МетодШифрованияZip.Aes256)
        
        для Файл из Каталог.Дочерние
            если Файл.Расширение == "doc"
                ЗаписьZip.Добавить(Файл.ОткрытьПотокЧтения(), Файл.Имя)
            ;
        ;

        ЗаписьZip.Записать()
    ;

  2. ДенисЧ

    25-02-2021 17:54

    ЗаписьZipФайла (ZipFileWriter)
    На основании потока
    Синтаксис:
    Новый ЗаписьZipФайла(<Поток>, <Пароль>, <Комментарий>, <МетодСжатия>, <УровеньСжатия>, <МетодШифрования>)

    Когда копируешь - внимательней надо быть )))

  3. polosov

    25-02-2021 17:57

    (0) Ты смотришь язык 1С:Исполнителя.

  4. mistergluck

    25-02-2021 17:57

    (1) зайдите по ссылке на итс

  5. mistergluck

    25-02-2021 18:00

    (2) Жаль.
    Может кто знает тогда как поместить в Архив (в поток)

    ЗаписьZip.Добавить(Файл.ОткрытьПотокЧтения(), Файл.Имя)

    Двоичные данные из другого потока?

  6. polosov

    25-02-2021 18:01

    (4) Ты наркоман?
    См. (1)

  7. mistergluck

    25-02-2021 18:04

    (5) Хотел, что-то вроде такого:

        Поток = новый ПотокВПамяти();
        ЗаписьТекста = новый ЗаписьДанных(Поток,"CESU-8",,,Символы.ПС);
        ЗаписьТекста.ЗаписатьСимволы("Пусть бегут неуклюже пешеходы по лужам А вода по асфальту рекой И не ясно прохожим в этот день непогожий Почему я веселый такой");
        
        ЗаписьТекста.Закрыть();

        ДвоичныеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
        
        
        
        ПотокZIP = новый ПотокВПамяти();
                          ZipWriter
            Сжатие = новый ЗаписьZipФайла(ПотокZIP,,,,  УровеньСжатияZIP.Максимальный);
            
            Сжатие.Добавить(Поток, РежимСохраненияПутейZIP.НеСохранятьПути);
            Сжатие.Записать();

  8. polosov

    25-02-2021 18:05

    (6) Да кто же тебя за руки то держит...

  9. mistergluck

    25-02-2021 18:07

    (7) ругается Сжатие.Добавить(Поток, РежимСохраненияПутейZIP.НеСохранятьПути);
    Пробовал и так
            Сжатие.Добавить(ДвоичныеДанные.ОткрытьПотокДляЧтения(), РежимСохраненияПутейZIP.НеСохранятьПути);

    Некорректное имя файла: Поток
    по причине:
    Файл не обнаружен 'Поток'. 2(0x00000002): Не удается найти указанный файл.

  10. polosov

    25-02-2021 18:14

    (8) Изначально что хочешь сделать?
    Не с http-сервисами ли работаешь?

  11. mistergluck

    25-02-2021 18:18

    (9) да

  12. polosov

    25-02-2021 18:21

    (10) А дальше что?
    Хочешь в gzip запихать свою байтики?

  13. mistergluck

    25-02-2021 18:23

    (11) да, есть код, который это делает, но записывает во временный файл. Хотел исключить запись на диск

  14. polosov

    25-02-2021 18:25

    (12) Не получится. Метод Добавить() у ЗаписьZipФайла ожидает только имени файла.

  15. sitex

    25-02-2021 20:40

    (0) Если ты хочет упаковать в HTTP запрос со сжатием GZIP средствами 1С то гугли -> gzip deflate 1C.