С Новым годом! Форум программистов, компьютерный форум, киберфорум
1С: Типовые и стандартные решения
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
 Аватар для Loya
70 / 57 / 24
Регистрация: 06.12.2015
Сообщений: 306
1C 8.x

Создание zip-архива, необходимо заархивировать папкис файлами

25.10.2018, 12:04. Показов 11019. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Подскажите, пожалуйста, мне нужно программно заархивировать папки с файлами. Если пишу так:
1C
1
2
3
4
5
6
7
    НовыйАрхив = Новый ЗаписьZipФайла(ИмяАрхива, "", "", МетодСжатияZIP.Сжатие, 
        УровеньСжатияZIP.Оптимальный, МетодШифрованияZIP.Zip20); 
    
    Для Каждого ФайлКартинки Из МассивФайлов Цикл       
        НовыйАрхив.Добавить(ФайлКартинки, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.НеОбрабатывать);                                    
    КонецЦикла;
    НовыйАрхив.Записать();
то в результате в архиве нету разбиения по папкам, просто все файлы в кучу.

А если пишу так:
1C
1
2
3
4
5
6
7
    НовыйАрхив = Новый ЗаписьZipФайла(ИмяАрхива, "", "", МетодСжатияZIP.Сжатие, 
        УровеньСжатияZIP.Оптимальный, МетодШифрованияZIP.Zip20); 
    
    Для Каждого ФайлКартинки Из МассивФайлов Цикл       
        НовыйАрхив.Добавить(ФайлКартинки, РежимСохраненияПутейZIP.СохранятьПолныеПути, РежимОбработкиПодкаталоговZIP.НеОбрабатывать);                                  
    КонецЦикла;
    НовыйАрхив.Записать();
то в результате в архиве папка, из которой выполняется обработка, потом папка для сохранения архива, и уже в ней нужные мне папки, в которых файлы. Как сделать так, чтоб в архиве были только нужные папки с файлами (т.е. например полный путь файла для архива:
E:\my\test\BrandName1\333.jpg
E:\my\test\BrandName2\334.jpg
а мне нужно чтоб в архиве было:
BrandName1\333.jpg
BrandName2\334.jpg

Заранее всем спасибо.

P.S. 1С8.2, УТ10.3

Добавлено через 55 секунд
В массиве МассивФайлов у меня полные пути к файлам, которые необходимо добавить в архив.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2018, 12:04
Ответы с готовыми решениями:

Как открыть архив Rar или Zip и работать с файлами архива.
Как открыть архив Rar или Zip и работать с файлами архива. Тоесть не распоковывая её, а сразу в Perle и работать с архивов как с...

Создание архива (ZIP)
Доброго времени суток, Если кто-то знает, как в VBS проводить архивацию папок в zip, подскажите, пожалуйста :) Мой поиск был...

Создание ZIP архива
Есть несколько xml файлов. Надо их засунуть в 1 архив. Есть-ли подходящая либа на плюсах? Про zlib знаю, но не очень бы хотелось писать...

8
Эксперт 1С
 Аватар для GreenkA
3064 / 2011 / 525
Регистрация: 25.06.2009
Сообщений: 6,964
25.10.2018, 13:39
Loya, в 1С достаточно простой механизм работы с архивами: либо полные пути, либо относительные.
В вашем случае я бы отсекала все слеши в пути, кроме последнего, создавала временные одноименные каталоги, копировала туда заданные файлы и архивировала бы файлы из пути нужного формата.
В конце - удалить файлы, созданные во временном каталоге пользователя.

Примерно так, но думаю, КаталогВременныхФайлов() использовать не стоит при сохранении полного пути. Задайте корень:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
&НаКлиенте
Перем МассивВременныхФайлов; 
 
&НаКлиенте
Процедура УпаковатьКакНадо(Команда)
//...   
    МассивВременныхФайлов = Новый Массив;
    
    Для Каждого ФайлКартинки Из МассивФайлов Цикл       
        НовоеИмяФайла = ПолучитьНовыйПуть(ФайлКартинки);
        НовыйАрхив.Добавить(НовоеИмяФайла, РежимСохраненияПутейZIP.СохранятьПолныеПути, РежимОбработкиПодкаталоговZIP.НеОбрабатывать);                                   
    КонецЦикла;
    НовыйАрхив.Записать();
    
    Для Каждого ВремФайл Из МассивВременныхФайлов Цикл
        УдалитьФайлы(ВремФайл);
    КонецЦикла;
КонецПроцедуры
 
&НаКлиенте
Функция ПолучитьНовыйПуть(СтрокаПути)
    ОтсеченныйПуть = СтрокаПути;
    ПозицияСлеш = Найти(СтрокаПути,"\");
    Пока ПозицияСлеш > 0 Цикл
        Если Найти(Сред(ОтсеченныйПуть,ПозицияСлеш+1),"\")> 0 Тогда //проверка на последний 
            ОтсеченныйПуть = Сред(ОтсеченныйПуть,ПозицияСлеш+1);
            ПозицияСлеш = Найти(ОтсеченныйПуть,"\");
        Иначе
            ПозицияСлеш = Найти(ОтсеченныйПуть,"\");
            Прервать;
        КонецЕсли;
    КонецЦикла;
    ИмяКаталога = Лев(ОтсеченныйПуть,ПозицияСлеш-1);
    ИмяФайла = Сред(ОтсеченныйПуть,ПозицияСлеш+1);
    //ПутьККорню = ...;
    НовыйКаталог = ПутьККорню + ИмяКаталога;
    СоздатьКаталог(НовыйКаталог);
    НовоеИмяФайла = НовыйКаталог + "\" + ИмяФайла;
    КопироватьФайл(СтрокаПути, НовоеИмяФайла);
    МассивВременныхФайлов.Добавить(НовоеИмяФайла);
    Возврат НовоеИмяФайла;
КонецФункции
По массиву временных файлов - можно было бы грохнуть сразу один каталог, но это дополнительная ветка в пути к файлу, а в случае разброса исходных файлов - однозначно не подходит.

Не по теме:

класс, я своими слэшами сломала подсветку кода


2
 Аватар для Loya
70 / 57 / 24
Регистрация: 06.12.2015
Сообщений: 306
25.10.2018, 14:58  [ТС]
GreenkA, спасибо большое! Я не стала так сильно заморачиваться, оставила возможность пользователю самому выбирать, или всё в одну кучу, или архив с вложенными папками, или вообще без архива (созданные папки с файлами заархивировать может вручную, это пара кликов мышкой). Но Ваш код наверняка пригодится мне или ещё кому-нить в будущем. Ещё раз спасибо!
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4131 / 939 / 264
Регистрация: 22.04.2013
Сообщений: 6,542
Записей в блоге: 1
25.10.2018, 15:52
поставлю спасибо, хотя не уверен. если не потребуется - через 1.5 года отзову.
1
25.10.2018, 15:55

Не по теме:

Yulunga, бартер)

0
26.10.2018, 01:28  [ТС]

Не по теме:

Цитата Сообщение от Yulunga Посмотреть сообщение
поставлю спасибо, хотя не уверен. если не потребуется - через 1.5 года отзову.
Цитата Сообщение от GreenkA Посмотреть сообщение
Yulunga, бартер)
Мне кажется тут слово "скряга" больше подходит. :)


Не по теме:

Yulunga, не в обиду, просто показалось забавным Ваше сообщение.

0
Модератор
Эксперт 1С
 Аватар для Yulunga
4131 / 939 / 264
Регистрация: 22.04.2013
Сообщений: 6,542
Записей в блоге: 1
26.10.2018, 16:21
Loya, не бойтесь. меня невозможно обидеть )
0
 Аватар для Loya
70 / 57 / 24
Регистрация: 06.12.2015
Сообщений: 306
26.10.2018, 16:49  [ТС]
Yulunga, это хорошо!
Случайно придумала читерский способ. Чтоб не возиться с путями и слешами, можно сохранить во временный каталог батник, который создаст архив, запустить его, а потом удалить. Только в батнике переменную окружения для 64-разрядных систем нужно указывать не %ProgramFiles%, а %ProgramW6432% (по крайней мере для 8.2).
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    ИмяФайла = ПутьКАрхиву + "\" + "Art.zip"; 
    ИмяBatФайла = ПолучитьИмяВременногоФайла(".bat");
    BatФайл = Новый ЗаписьТекста(ИмяBatФайла, КодировкаТекста.ANSI);
    //BatФайл.ЗаписатьСтроку("set a7z=%ProgramFiles%\7-Zip\7z.exe");
    BatФайл.ЗаписатьСтроку("set a7z=%ProgramW6432%\7-Zip\7z.exe");
    BatФайл.ЗаписатьСтроку("set archive=" + ПутьКАрхиву);
    BatФайл.ЗаписатьСтроку("""%a7z%"" a ""%archive%\Art.zip"" ""%archive%\*""");
    BatФайл.Закрыть();
    ЗапуститьПриложение(ИмяBatФайла,, Истина);
    Попытка
        УдалитьФайлы(ИмяBatФайла);
    Исключение
        
    КонецПопытки;
        
    СозданныйАрхив = Новый Файл(ИмяФайла);   
    Если СозданныйАрхив.Существует() Тогда
        УдалитьКаталоги();               
    Иначе
        Сообщить("Архив не был создан! Создайте архив вручную.", СтатусСообщения.Важное);
    КонецЕсли;
2
0 / 0 / 0
Регистрация: 04.05.2021
Сообщений: 4
30.05.2021, 12:07
Помогите пожалуйста с архивацией файлов в 7zip. Мне нужно сжать 80гб хотя бы в 2 раза или больше. Как это можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2021, 12:07
Помогаю со студенческими работами здесь

Создание ZIP архива
У меня есть несколько папок с файлами, надо из каждой папки создать ZIP архив. Как это сделать? Добавлено через 1 час 9 минут Мне...

Как исключить папку и ее подпапки со всеми файлами из создаваемого с использованием 7-Zip архива?
Обычная ситауция в папке C:\WebServers\ WAMP-дистрибутив денвера, в поддиректории C:\WebServers\home\nulled\www тестовая КМС. ...

Создание архива rar/zip на C++
Народ, такая ситуация, мне необходимо создать архив rar или zip (желательно rar, запароленный) при помощи консольной программы на C++. ...

ZipTV создание zip архива
Есть компонент ZipTV Никак не могу понять, как с помощью него создать zip архив. Архивировать должен папку и все файлы в ней, в том...

Создание zip-архива средствами PHP
Привет, ни как не могу найти в интернете (как создать zip-архив с определенной директории). Задача: Нужно выбрать директорию, а потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru