Имя: Пароль:
1C
1С v8
Архивирование - ЗаписьZIPФайла
, ,
0 kisobol
 
12.08.15
03:58
Подскажите, в табличной части задаются пути к данным которые нужно за архивировать, если указать файлы то данные копируются, но если указать напрямую папку с файлами, то создается пустой архив.


&НаКлиенте
Процедура Архивировать(Команда)

   Архив = Новый ЗаписьZIPФайла(Объект.ПутьКудаКопировать+"\"+"Архив"+".zip", "Пароль", "Комментарий",
   МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);

   Для Каждого СтрокаТЧ ИЗ Объект.ТабОткудаКопировать Цикл //обходим табличную часть, в ней строки с путем где лежат файлы
     Архив.Добавить(СтрокаТЧ.ПутьОткудаКопировать, РежимСохраненияПутейZIP.СохранятьПолныеПути,
       РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
   КонецЦикла;
   Архив.Записать();
   Сообщить("Заархивировал");

КонецПроцедуры
1 Снежный человек
 
12.08.15
04:39
<РекурсивнаяОбработкаПодпапок> (необязательный)

Тип: РежимОбработкиПодкаталоговZIP.
В случае добавления файлов по маске обрабатывать дополнительно подкаталоги.
Значение по умолчанию: НеОбрабатывать.

РежимОбработкиПодкаталоговZIP (ZIPSubDirProcessingMode)
Значения

НеОбрабатывать (DontProcess)
ОбрабатыватьРекурсивно (ProcessRecursively)

Описание:

Содержит варианты обработки масок файлов в именах для упаковки в ZIP архив.
2 kisobol
 
12.08.15
04:42
Пробовал и так и так

НеОбрабатывать (DontProcess)
ОбрабатыватьРекурсивно (ProcessRecursively)


Все равно архив пустой
3 Снежный человек
 
12.08.15
04:43
(2) используй rar, жмет лучше и проще с ним.
4 kisobol
 
12.08.15
04:47
На системе нет рара =(
Нужно извратиться с зипом.
5 ASV
 
12.08.15
04:48
Архив.Добавить(СтрокаТЧ.ПутьОткудаКопировать+'\*', РежимСохраненияПутейZIP.СохранятьПолныеПути,
       РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
6 kisobol
 
12.08.15
06:35
ASV, да работает с папками. Но теперь к расширению файла прибавляется \ и вываливается

{Справочник.МестоБекапа.Форма.ФормаЭлемента.Форма(73)}: Ошибка при вызове метода контекста (Добавить)
         Архив.Добавить(СтрокаТЧ.ПутьОткудаКопировать+"\", РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
по причине:
Некорректное имя файла: file://E:\upload.xml\*
по причине:
Неправильный путь к файлу 'file://E:\upload.xml\*'. 123(0x0000007B): Синтаксическая ошибка в имени файла, имени папки или метке тома.
7 ЧеловекДуши
 
12.08.15
06:38
Строчка "Добавить" и добавляет в пакет архива все файлы.
Соизволь в цикле пройтись по всем нужным файлам :)
8 ЧеловекДуши
 
12.08.15
06:39
(6) Это ДНК, не излечимо :)
9 kisobol
 
12.08.15
06:44
Так циклом прохожусь, он добавляет все папки с содержимым в архив, но казлит именно на отдельных файлах.
10 ЧеловекДуши
 
12.08.15
06:57
(9) Ты добавь проверочку

Файл = Новый Файл(ПутьКФайлу);
Файл.ЭтоФайл()
Или
Файл.ЭтоКаталог()

Как вам угодно :)
11 ЧеловекДуши
 
12.08.15
06:57
(9) И лишний наклонную не проставляй, если это не каталог или если это файл :)
12 kisobol
 
12.08.15
07:20
Спасибо за пинок.

&НаКлиенте
Процедура Архивировать(Команда)

    Архив = Новый ЗаписьZIPФайла(Объект.ПутьКудаКопировать+"\"+"Архив"+".zip", "Пароль", "Комментарий",
    МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);

    Для Каждого СтрокаТЧ ИЗ Объект.ТабОткудаКопировать Цикл //обходим табличную часть, в ней строки с путем где лежат файлы
        Файл = Новый Файл(СтрокаТЧ.ПутьОткудаКопировать);
        Если Файл.ЭтоФайл() Тогда
              Архив.Добавить(СтрокаТЧ.ПутьОткудаКопировать, РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
            РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
        Иначе
             Архив.Добавить(СтрокаТЧ.ПутьОткудаКопировать+"\", РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
            РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
        КонецЕсли;             
    КонецЦикла;

    Архив.Записать();
    Сообщить("Заархивировал");

КонецПроцедуры
2 + 2 = 3.9999999999999999999999999999999...