Имя: Пароль:
1C
 
1С 8.3.*. ЗаписьZIPФайла криво отрабатывает
0 DTX 4th
 
20.11.15
16:59
В общем, недавно обновили платформу с 8.2 до 8.3 и через пару недель узнали, что в ЗУПе слетели внешние печатные формы. Они были написано очень давно и генерят отчет на основании вордовского файла.
Выглядит примерно так:

ЧтениеZip = Новый ЧтениеZipФайла(ИмяФайла);    
    ИмяПапки = Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4);
    СоздатьКаталог(ИмяПапки);                
    ЧтениеZip.ИзвлечьВсе(ИмяПапки);
    
    ТекДок = Новый ТекстовыйДокумент();
    ТекДок.Прочитать(ИмяПапки+"\word\document.xml", КодировкаТекста.UTF8);    
    Строка = ТекДок.ПолучитьТекст();
    
    Для каждого Параметр Из Параметры Цикл
        
        ТекКлюч = Параметр.Ключ;
        ТекПараметр = Параметр.Значение;
        
        Строка = СтрЗаменить(Строка, Параметр.Ключ, Параметр.Значение);
        
    КонецЦикла;

    ТекДок.УстановитьТекст(Строка);
    ТекДок.Записать(ИмяПапки+"\word\document.xml", КодировкаТекста.UTF8);

    ЗаписьZip = Новый ЗаписьZipФайла(ИмяФайла);    
    ЗаписьZip.Добавить(ИмяПапки+"\_rels\", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
    ЗаписьZip.Добавить(ИмяПапки+"\docProps\",РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
    ЗаписьZip.Добавить(ИмяПапки+"\word\", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
    ЗаписьZip.Добавить(ИмяПапки+"\[Content_Types].xml",РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);

    ЗаписьZip.Записать();
    
    УдалитьФайлы(ИмяПапки);    

Но сейчас ЗаписьZIPФайла создаёт архив с кривой структурой. В папках верхнего уровня появляется странная папка, которая в ТС называется как вышестоящая папка, но со слешем на конце, а в 7zip выглядит как папка с пустым наименование (на скрине этого не запечатлил).
http://i11.pixs.ru/storage/3/1/3/SnimokPNG_7581722_19577313.png

Кто-нибудь сталкивался?
1 Garykom
 
гуру
20.11.15
17:25
ИмяПапки = Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4);

ничего не смущает для имени из 4 символов?
2 mehfk
 
20.11.15
17:34
(1) Это отнимается 4-ре символа расширения. Но точка в имени остается. Может точку убрать?
3 Goggy
 
20.11.15
17:36
(0) Вчера(19.11) вышла новая платформа. Если память не изменяет они там что-то на эту тему исправляли. Попробуй может подойдёт.
4 mehfk
 
20.11.15
17:36
Лучше использовать объект Файл и получать имя без расширения через свойство ИмяБезРасширения
5 Goggy
 
20.11.15
17:37
+(3) но предварительно просмотри список исправленного/добавленного чтоб зря время не тратить, а то вдруг я тебе тут насоветую сферических проституток в майонезе :)
6 Живой Ископаемый
 
20.11.15
17:39
2(2) фигово так делается. Правильно так:
        Файл=Новый Файл(ИмяФайла);
        Если Файл.Существует() Тогда
ЧтениеZip = Новый ЧтениеZipФайла(ИмяФайла);
ИмяПапки = Файл.Путь;


///// Есть также свойства:
Файл.ПолноеИмя
Файл.ИмяБезРасширения
Файл.Расширение
7 mehfk
 
20.11.15
17:42
2(6) ты (4) читал?
8 Живой Ископаемый
 
20.11.15
17:43
2(7) нет, когда я писал, (4) еще не было.
9 Живой Ископаемый
 
20.11.15
17:44
В любом случае, пусть ТС выполняет
10 DTX 4th
 
20.11.15
18:06
(1) Да, косяк. Но после исправления лучше не стало

(3) Первым делом попробовал. Не помогло(
11 Garykom
 
гуру
20.11.15
18:08
(10) отрубай по очереди запись/добавление файлов в архив и смотри что будет

точнее все отруби и добавляй по одному
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший