![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
flankerr |
![]() ![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Есть некий набор данных который создаёт программа. Надо их опяттаки программно сжать в ZIP и сохранить. Разумеется хочется чтоб была возможность следить за процеесом для возможности информировать сколько осталось время до конца сжатия. Всякие вызовы сторонних EXE отметаються сразу. Ну и кросплатформенность ни кто не отменял.
Может кто в курсе как это организовать ? |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
помоему на прогорге это обширно обсуждалось. Можно сюда глянуть
Вот чего накопал по этой теме: zlib (та что с Qt) - только методы сжатия данных. QuaZIP - не поддерживает подкаталоги Info-Zip - нет информации (надо разбиратся) zziplib - нет информации (надо разбиратся) Могут оказатся полезными: Self-Extracting Installer The OSDaB Project - какие-то фрагменты кода на C++/Qt, в том числе Zip |
|
|
sploid |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 51 Регистрация: 26.2.2008 Из: Москва Пользователь №: 106 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
у тролей есть zlib как 3rdparty
src/3rdparty/zlib/ http://qt.nokia.com/doc/4.5/3rdparty.html#...y-version-1-2-3 |
|
|
flankerr |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Если как сжать набор байт стало относительно понятно.
Но вот как сделать прогесбар пока не ясно. Вызвать тот же qCompress и тупо ждать неизвестно сколько пока он сжимает как то совсем мимо цели Т.к. процесс сжатия может занять достаточно длительное время то прогрессбар просто обязан быть. Да и что делать для сжать папки с вложенными папками и файлами тоже не ясно. Городить огород с собственным форматом выходного файла нельзя т.к. необходимо чтобы результат сжатия можно было распаковатть классическим ZIP-ом. Сообщение отредактировал flankerr - 9.10.2009, 12:35 |
|
|
kwisp |
![]()
Сообщение
#5
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
flankerr,
что ни одно из предоложенных решений Юрием не предоставляет возможности сжимать вложенные паки? и никак не прикрутишь прогрессБар? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
flankerr |
![]()
Сообщение
#7
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 9.1.2008 Пользователь №: 65 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
kwisp,
QuaZIP Zlib qCompress жмут поток т.е. папку с вложением подсунуть нельзя. И как правильно сказал Litkevich Yuriy, нет обратной связи. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
flankerr, видимо у тебя один выход - заниматся раскопками ОпенСорсных проектов типа 7Zip...
|
|
|
SABROG |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
flankerr, видимо у тебя один выход - заниматся раскопками ОпенСорсных проектов типа 7Zip... Бессмысленно. Мои копания привели к тому, что разработчики предоставляют библиотеку только для создания 7z архивов, ни zip, ни rar и т.п. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Однако исодники у них открыты, или я ошибаюсь?
|
|
|
SABROG |
![]()
Сообщение
#11
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
BRE |
![]()
Сообщение
#12
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Можно посмотреть решение в KDE. Там правда все сделано глобально, т.е. есть целая иерархия классов начиная с KArchive. У него есть наследник KZip.
Или посмотреть на библиотеку libzip. Она сишная, но можно самому написать враппер для C++ со всем необходимым функционалом. Также вроде есть готовый враппер libzipios++. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
в KDE в большенстве случаев индикатор выполнения болтается туда-сюда.
|
|
|
BRE |
![]()
Сообщение
#14
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
в KDE в большенстве случаев индикатор выполнения болтается туда-сюда. Если писать свой враппер, то это можно сделать как надо: * Открыть архив * Найти по имени файла его индекс * Получить информацию о файле по индексу (необходим размер распакованных данных) * В цикле читаем данные файла из архива кусками и посылаем сигнал о прогрессе. Сообщение отредактировал BRE - 11.10.2009, 13:21 |
|
|
kuzulis |
![]()
Сообщение
#15
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: ![]() ![]() ![]() |
А почему автору нельзя использовать сторонние архиваторы?
Проще, ИМХО, через QProcess их вызывать и в опциях командной строки подсовывать нужные каталоги для сжатия... Для этого в самой программе автора определять - какие из архиваторов находятся в системе... НЕ ? ![]() |
|
|
kwisp |
![]()
Сообщение
#16
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
kuzulis,
первый пост об этом говорит. |
|
|
filinGUI |
![]()
Сообщение
#17
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.10.2009 Пользователь №: 1152 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
flankerr
Архивирование с вложенными каталогами и отображением прогресса можно сделать, используя Info-ZIP. Архив получается вполне стандартный и распакуется везде. Надо только собрать zip и unzip как dll и написать callback-функцию для отображения прогресса. |
|
|
SABROG |
![]()
Сообщение
#18
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
flankerr Архивирование с вложенными каталогами и отображением прогресса можно сделать, используя Info-ZIP. Архив получается вполне стандартный и распакуется везде. Надо только собрать zip и unzip как dll и написать callback-функцию для отображения прогресса. Найти бы еще пример как это делать. Мои копания примеров этой утилиты привели только к одному заключению - функций типа createZip()/Unzip() нет. Т.е. нужно делать какие-то подготовительные телодвижения, логика которых не становится понятной глядя на код. |
|
|
filinGUI |
![]()
Сообщение
#19
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 12.10.2009 Пользователь №: 1152 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Найти бы еще пример как это делать. Мои копания примеров этой утилиты привели только к одному заключению - функций типа createZip()/Unzip() нет. Т.е. нужно делать какие-то подготовительные телодвижения, логика которых не становится понятной глядя на код. Таких простых функций действительно нет, для упаковки используется последовательность вызовов ZpInit / ZpSetOptions / ZpArchive, для распаковки вызывается Wiz_SingleEntryUnzip. Для своего проекта я написал функцию SimpleUnzip (Qt3, библиотека Unzip.dll загружается динамически) Раскрывающийся текст
Могу дать ещё пример SimpleZip для упаковки, но только на Delphi |
|
|
SABROG |
![]()
Сообщение
#20
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Плохо это решение тем, что оно не переносимо, ибо этот Wizard dll API зависим в то время как внутренние вызовы самой библиотеки InfoZip переносимы. Т.е., чтобы понять как это работает и правильно написать код, надо сначала переписать Wizard dll на обычном C++ с использованием STL или обычном Си. Потом уже этот код использовать в Qt.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 13.7.2025, 13:37 |