|
|
Запись в ZIP Файл
Dakukira, Akiraman26, LienXo, backfire, бомболюк, END, DiMel_77, Bazooka, LLeonidov, Bad_Aleks, Ногаминебить, Гипервизор, Андрюха, МаленькийВопросик, vbus, Шаграм, baza1, Доминошник, vsy, orakool, VladZ, A_G, ЯнСмит, Garykom, Dzenn, nvm220380, SilentMan, Chai Nic, rozer76, KJlag, Черников, АгентБезопаснойНацио, p-soft, Мультук, Федя Тяпкин, Hawk_1c, dedmoroz777, DimVad, Smit1C, Caesar, Kigo_Kigo, Alex7771, takefive, H A D G E H O G s, ivanov-i-i, eRik, nick86, comp2006, zenik, RVN, zenon46, navigator, Джордж1, Fish, Vstur, Alexor, Crusher, Timon1405, maxab72, kostik79, dyevgeniy, RomanYS, Telcher, DimR_71, Sanchez_22, phabeZ, elka302, paramedic, obs191, s_trikozin
| ☑ |
|
0
Telcher
12.11.25
✎
07:56
|
Добрый день, коллеги! Мне нужно сохранить двоичные данные в ZIP архив с учетом подкаталога. Написал следующий код:
ПотокZIP = Новый ПотокВПамяти();
Архиватор = Новый ЗаписьZipФайла(ПотокZIP);
ВрКаталог = КаталогВременныхФайлов();
ВрКаталог = ВрКаталог + "Тест\";
Для Каждого СтрокаЭД Из ТаблицаЭД Цикл
ПолныйПуть = ВрКаталог + "Каталог_1" + "\";
КаталогСуществует = Новый Файл(ПолныйПуть);
Если НЕ КаталогСуществует.Существует() Тогда
СоздатьКаталог(ПолныйПуть);
КонецЕсли;
ВрФайл = ПолныйПуть + СтрокаЭД.ПолноеИмяФайла;
СтрокаЭД.ДвоичныеДанныеФайла.Записать(ВрФайл);
Архиватор.Добавить(ВрФайл,РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
КонецЦикла;
Архиватор.Записать();
УдалитьФайлы(ВрКаталог);
ДвоичныеДанныеZIP = ПотокZIP.ЗакрытьИПолучитьДвоичныеДанные();
ДвоичныеДанныеZIP.Записать("C:\Users\d.kanakin\Desktop\тест" + "\" + "НаименованиеФайла" + ".zip");
|
|
|
1
Telcher
12.11.25
✎
07:58
|
(0) "ВрКаталог = ВрКаталог + "Тест\";" + тест нужен для удаления всех созданных файлов
При использовании "РежимСохраненияПутейZIP.СохранятьОтносительныеПути" в добавлении файла в архиватор - не сохраняет подкатолог "Каталог_1".
Если изменить на Сохранятьполныепути - сохраняет весь путь от диска С до папки темп.
Мне нужно получить итог такой:
ZIP Архив - Каталог_1 - Файлы
|
|
|
2
Telcher
12.11.25
✎
08:20
|
Вот так выглядит ZIP архив, который у меня получается. При использовании режима сохранения "СохранятьОтносительныеПути" - пути с папкой темп нет, если использовать "СохранятьПолныеПути" - получается вот такой путь в архиве
Во временном каталоге все сохраняется как нужно, просто не нужен полный путь до него, а буквально требуется скопировать все каталоги из "Тест" в ZIP архив
|
|
|
3
SilentMan
12.11.25
✎
08:40
|
При добавлении одиночного файла признак сохранения относительного пути бесполезен. Готовь отдельный каталог с файлами и нужной структурой, а потом по маске складывай этот каталог в архив. Получишь относительные пути.
|
|
|
4
Telcher
12.11.25
✎
08:43
|
(3) Спасибо. Попробую
|
|
|
5
Telcher
12.11.25
✎
09:31
|
(3) Получилось добиться необходимого результата, благодарю
Если кому-то пригодится, вот итоговый код:
ПотокZIP = Новый ПотокВПамяти();
Архиватор = Новый ЗаписьZipФайла(ПотокZIP);
ВрКаталог = КаталогВременныхФайлов();
ВрКаталог = ВрКаталог + "ТемпКаталог\";
Для Каждого СтрокаЭД Из РезультатФормирования.ТаблицаЭД Цикл
Контрагент = СтрокаЭД.Контрагент;
ПолныйПуть = ВрКаталог + Контрагент.Наименование + "\"; // Путь с учетом подкаталога контрагента
КаталогСуществует = Новый Файл(ПолныйПуть);
Если НЕ КаталогСуществует.Существует() Тогда
СоздатьКаталог(ПолныйПуть);
КонецЕсли;
ВрФайл = ПолныйПуть + СтрокаЭД.ПолноеИмяФайла;
СтрокаЭД.ДвоичныеДанныеФайла.Записать(ВрФайл);
КонецЦикла;
Маска = ВрКаталог + "*.*";
Архиватор.Добавить(Маска, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архиватор.Записать();
УдалитьФайлы(ВрКаталог);
ДвоичныеДанныеZIP = ПотокZIP.ЗакрытьИПолучитьДвоичныеДанные();
ДвоичныеДанныеZIP.Записать(Каталог + Строка.Организация.ФамилияИП + ".zip");
|
|
|
6
Маленький Вопросик
12.11.25
✎
12:35
|
(0) интересно, как будешь передавать файл с сервера на клиент?
вот самый простой путь корректного формирования архива с необходимыми данными - ищи в моем профиле на известном ресурсе
с сохранением в выбранный каталог с уникальным именем
|
|
|
7
Мультук
гуру
12.11.25
✎
11:05
|
(6)
Приплачиваешь Волшебнику за рекламу ?
|
|
|
8
Маленький Вопросик
12.11.25
✎
12:27
|
(7) видишь ли в чем «проблема» - на практически все технические вопросы «а как сделать?» которые тут задаются у меня есть практический код ответ…
Потому, что я последние 15 лет только кодингом и занимался..
вместо того, чтобы «переливать из пустого в порожнее»
В чем твой интерес?
|
|
|
9
Маленький Вопросик
12.11.25
✎
12:34
|
А по делу - в коде (5) не реализована передача файла с сервера на клиент! На локальной машине будет работать, а на удаленной нет!
|
|
|
10
Мультук
гуру
12.11.25
✎
12:53
|
(8)
Любопытство, не более того.
|
|
|
11
SilentMan
12.11.25
✎
13:24
|
(9) Так автор и не заявлял желания узнать, как передавать файл с сервера на клиент. Кому нужны неспрошенные советы?
Да и не будет оно на локальной машине работать (в общем случае). Кроме, наверное, толстого клиента/обычного приложения.
|
|
|
12
Маленький Вопросик
12.11.25
✎
15:03
|
(11) не заявлял, похоже и не знает про эти моменты. писать нужно правильно код, а не выдумывать самому себе условия и "советы"
|
|