ZIP архив создать программно как ? |
Здравствуйте, гость ( Вход | Регистрация )
ZIP архив создать программно как ? |
SABROG |
9.10.2009, 23:39
Сообщение
#11
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
BRE |
11.10.2009, 12:25
Сообщение
#12
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Можно посмотреть решение в KDE. Там правда все сделано глобально, т.е. есть целая иерархия классов начиная с KArchive. У него есть наследник KZip.
Или посмотреть на библиотеку libzip. Она сишная, но можно самому написать враппер для C++ со всем необходимым функционалом. Также вроде есть готовый враппер libzipios++. |
|
|
Litkevich Yuriy |
11.10.2009, 12:33
Сообщение
#13
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
в KDE в большенстве случаев индикатор выполнения болтается туда-сюда.
|
|
|
BRE |
11.10.2009, 12:46
Сообщение
#14
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
в KDE в большенстве случаев индикатор выполнения болтается туда-сюда. Если писать свой враппер, то это можно сделать как надо: * Открыть архив * Найти по имени файла его индекс * Получить информацию о файле по индексу (необходим размер распакованных данных) * В цикле читаем данные файла из архива кусками и посылаем сигнал о прогрессе. Сообщение отредактировал BRE - 11.10.2009, 13:21 |
|
|
kuzulis |
12.10.2009, 8:13
Сообщение
#15
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
А почему автору нельзя использовать сторонние архиваторы?
Проще, ИМХО, через QProcess их вызывать и в опциях командной строки подсовывать нужные каталоги для сжатия... Для этого в самой программе автора определять - какие из архиваторов находятся в системе... НЕ ? |
|
|
kwisp |
12.10.2009, 8:23
Сообщение
#16
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
kuzulis,
первый пост об этом говорит. |
|
|
filinGUI |
12.10.2009, 14:11
Сообщение
#17
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.10.2009 Пользователь №: 1152 Спасибо сказали: 0 раз(а) Репутация: 0 |
flankerr
Архивирование с вложенными каталогами и отображением прогресса можно сделать, используя Info-ZIP. Архив получается вполне стандартный и распакуется везде. Надо только собрать zip и unzip как dll и написать callback-функцию для отображения прогресса. |
|
|
SABROG |
12.10.2009, 14:30
Сообщение
#18
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
flankerr Архивирование с вложенными каталогами и отображением прогресса можно сделать, используя Info-ZIP. Архив получается вполне стандартный и распакуется везде. Надо только собрать zip и unzip как dll и написать callback-функцию для отображения прогресса. Найти бы еще пример как это делать. Мои копания примеров этой утилиты привели только к одному заключению - функций типа createZip()/Unzip() нет. Т.е. нужно делать какие-то подготовительные телодвижения, логика которых не становится понятной глядя на код. |
|
|
filinGUI |
12.10.2009, 15:11
Сообщение
#19
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.10.2009 Пользователь №: 1152 Спасибо сказали: 0 раз(а) Репутация: 0 |
Найти бы еще пример как это делать. Мои копания примеров этой утилиты привели только к одному заключению - функций типа createZip()/Unzip() нет. Т.е. нужно делать какие-то подготовительные телодвижения, логика которых не становится понятной глядя на код. Таких простых функций действительно нет, для упаковки используется последовательность вызовов ZpInit / ZpSetOptions / ZpArchive, для распаковки вызывается Wiz_SingleEntryUnzip. Для своего проекта я написал функцию SimpleUnzip (Qt3, библиотека Unzip.dll загружается динамически) Раскрывающийся текст
Могу дать ещё пример SimpleZip для упаковки, но только на Delphi |
|
|
SABROG |
12.10.2009, 15:19
Сообщение
#20
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Плохо это решение тем, что оно не переносимо, ибо этот Wizard dll API зависим в то время как внутренние вызовы самой библиотеки InfoZip переносимы. Т.е., чтобы понять как это работает и правильно написать код, надо сначала переписать Wizard dll на обычном C++ с использованием STL или обычном Си. Потом уже этот код использовать в Qt.
|
|
|
Текстовая версия | Сейчас: 2.12.2024, 17:45 |