Как модифицировать zip архив

1. Oleg_nsk 278 09.02.17 08:13 Сейчас в теме
Имеется: zip архив мегабайтов на 60 состоящий из множества мелких файлов.
Требуется: заменить один из файлов в архиве на другой с тем же именем
Вопрос: Есть ли возможность сделать это средствами языка 1с не распаковывая весь архив методом "ИзвлечьВсе()" с модификацией и последующей запаковкой, а точечно отредактировать нужный файл?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. ture 606 09.02.17 09:30 Сейчас в теме
(1) Алгоритм сжатия полностью исключает ваши надежды. В начале все складывается в один большой массив байт (файлы записываются последовательно), потом выискивается подходящий размер блока, затем массив нарезается на блоки и подсчитываются повторения блоков, в конце в место блоков вписываются номера, а сами блоки становятся словарем.

Весь архив требуется перестраивать, когда в нем что-то меняется.
12. Oleg_nsk 278 09.02.17 10:08 Сейчас в теме
(10) Вообще, если делать интерактивно операцию перетаскивания мышкой файла допустим в программе winrar, то в каталоге архива формируется новый временный скрытый файл архива с новым уникальным именем, туда запихиваются файлы извлекаемые налету из нашего архива, но с новым подмененным файлом и после этого старый архив подменяется новым. Полной распаковки 60 Мб архива в 800 Мб на жесткий диск не происходит. Понимаете в чем проблема?
14. shurikvz 09.02.17 13:02 Сейчас в теме
(10) не специалист в области сжатия, но не совсем так.В винрар было (есть?) такое понятие как "непрерывный архив". Там да имел место такой принцип. А в "классическом" так сказать способе сжатия - каждый файл сжимается отдельно.
Преимуществом непрерывного архива была потенциально возможная большая степень сжатия (да именно потому, что все файлы складывались в большой массив, соответственно повторения блоков было больше), недостатком соответственно является то, что при повреждении части архива невозможно извлечь вообще ничего (ни один файл) из этого архива.
2. Sokar 09.02.17 08:27 Сейчас в теме
как вариант можно использовать функцию ПодставитьПараметрыВСтроку() и через командную строку выполнить заранее созданный батник
4. Oleg_nsk 278 09.02.17 08:51 Сейчас в теме
(2)Требуется встроенным языком.
3. Sokar 09.02.17 08:30 Сейчас в теме
кстати тут лежит обработка по работе с архивами
http://infostart.me/public/309377/
5. Oleg_nsk 278 09.02.17 08:53 Сейчас в теме
(3)Там используется код:
	Архив = Новый ЗаписьZIPФайла("c:\архив.zip", "", "", МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный, МетодШифрованияZIP.Zip20);
										
	Архив.Добавить("c:\ZIP\*.xls", 
				РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
				РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
								
	Архив.Записать();

Но он затирает всё то, что ранее было в архиве. В этом и проблема
6. Sokar 09.02.17 09:19 Сейчас в теме
(5) естественно затирает, вы же новый архив создали )))
8. Oleg_nsk 278 09.02.17 09:22 Сейчас в теме
(6)
09.02.17 09:19 Сейчас в теме
(5) естественно затирает, вы же новый архив создали )))

Ну тогда либо вы вопрос не читали, либо по приколу рекомендуете использовать обработку которая никак проблему не решает
7. Sokar 09.02.17 09:22 Сейчас в теме
боюсь, что без ИзвлечьВсе вы никак не сможете внутренними средствами реализовать свою задачу... если использовать консольные приложения (например, 7z), то еще можно извратиться через строку запуска, иначе имхо никак
9. Oleg_nsk 278 09.02.17 09:25 Сейчас в теме
(7)К сожалению, похоже это так и есть. Очень странно что только у меня такая потребность возникла (судя по отклику поисковиков), ведь распаковка и запаковка огромных архивов занимает достаточно времени. Придется использовать что-то за пределами 1с
11. Stormicon 8 09.02.17 09:31 Сейчас в теме
(9) Насколько помню, вполне корректно с зип-архивами в этом смысле работают стандартные команды windows по работе со сжатыми папками
13. vipetrov2 09.02.17 12:49 Сейчас в теме
Разработать самому алгоритм разбиения на множество кусков, по принципу 1 кусок - это отдельный архив. И уже тогда можно будет 1 кусок отдельно быстро переархивировать. Но здесь уже куски фиксированного размера не будут.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот