Здравствуйте, гость ( Вход | Регистрация )
SABROG | Дата 12.10.2009, 15:19 |
Плохо это решение тем, что оно не переносимо, ибо этот Wizard dll API зависим в то время как внутренние вызовы самой библиотеки InfoZip переносимы. Т.е., чтобы понять как это работает и правильно написать код, надо сначала переписать Wizard dll на обычном C++ с использованием STL или обычном Си. Потом уже этот код использовать в Qt. | |
filinGUI | Дата 12.10.2009, 15:11 |
Найти бы еще пример как это делать. Мои копания примеров этой утилиты привели только к одному заключению - функций типа createZip()/Unzip() нет. Т.е. нужно делать какие-то подготовительные телодвижения, логика которых не становится понятной глядя на код. Таких простых функций действительно нет, для упаковки используется последовательность вызовов ZpInit / ZpSetOptions / ZpArchive, для распаковки вызывается Wiz_SingleEntryUnzip. Для своего проекта я написал функцию SimpleUnzip (Qt3, библиотека Unzip.dll загружается динамически) Раскрывающийся текст
Могу дать ещё пример SimpleZip для упаковки, но только на Delphi |
|
SABROG | Дата 12.10.2009, 14:30 |
flankerr Архивирование с вложенными каталогами и отображением прогресса можно сделать, используя Info-ZIP. Архив получается вполне стандартный и распакуется везде. Надо только собрать zip и unzip как dll и написать callback-функцию для отображения прогресса. Найти бы еще пример как это делать. Мои копания примеров этой утилиты привели только к одному заключению - функций типа createZip()/Unzip() нет. Т.е. нужно делать какие-то подготовительные телодвижения, логика которых не становится понятной глядя на код. |
|
filinGUI | Дата 12.10.2009, 14:11 |
flankerr Архивирование с вложенными каталогами и отображением прогресса можно сделать, используя Info-ZIP. Архив получается вполне стандартный и распакуется везде. Надо только собрать zip и unzip как dll и написать callback-функцию для отображения прогресса. |
|
kwisp | Дата 12.10.2009, 8:23 |
kuzulis, первый пост об этом говорит. |
|
kuzulis | Дата 12.10.2009, 8:13 |
А почему автору нельзя использовать сторонние архиваторы? Проще, ИМХО, через QProcess их вызывать и в опциях командной строки подсовывать нужные каталоги для сжатия... Для этого в самой программе автора определять - какие из архиваторов находятся в системе... НЕ ? |
|
BRE | Дата 11.10.2009, 12:46 |
в KDE в большенстве случаев индикатор выполнения болтается туда-сюда. Если писать свой враппер, то это можно сделать как надо: * Открыть архив * Найти по имени файла его индекс * Получить информацию о файле по индексу (необходим размер распакованных данных) * В цикле читаем данные файла из архива кусками и посылаем сигнал о прогрессе. |
|
Litkevich Yuriy | Дата 11.10.2009, 12:33 |
в KDE в большенстве случаев индикатор выполнения болтается туда-сюда. | |
BRE | Дата 11.10.2009, 12:25 |
Можно посмотреть решение в KDE. Там правда все сделано глобально, т.е. есть целая иерархия классов начиная с KArchive. У него есть наследник KZip. Или посмотреть на библиотеку libzip. Она сишная, но можно самому написать враппер для C++ со всем необходимым функционалом. Также вроде есть готовый враппер libzipios++. |
|
SABROG | Дата 9.10.2009, 23:39 |
Однако исодники у них открыты, или я ошибаюсь? Открыты, только тогда придеться брать исходники p7zip (порт под linux). Там вроде бы какраз есть директория zip с исходниками. Думаю там точно такая же канитель будет с пониманием ABI, как и в InfoZip. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 27.4.2024, 9:11 |