|
|
|
Запись в ZIP Файл МаленькийВопросик, Zamestas, 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
| ☑ | ||
|---|---|---|---|---|
|
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) не заявлял, похоже и не знает про эти моменты. писать нужно правильно код, а не выдумывать самому себе условия и "советы"
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |