Russian Qt Forum
Октябрь 03, 2024, 05:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt - Работа с zip фрхивами  (Прочитано 22546 раз)
DikBSD
Гость
« : Январь 03, 2009, 18:28 »

Подскажите, как можно средствами Qt читать содержимое (распаковывать) zip-архивы и  сжимать многоуровневые папки с файлами в zip.
Спасибо.
Записан
Dendy
Гость
« Ответ #1 : Январь 03, 2009, 18:37 »

У них специальных классов или абстрактных интерфейсов для архивов нету. Ъ-way - переопределить QAbstractFileEngineHandler и изобрести велосипед (найти велосипед в интернете) для работы с архивами как с файлами. Я такой в своё время писал. Работало. Из Zlib наружу у них кажется только qCompressed() торчит.
Записан
Karl-Philipp
Гость
« Ответ #2 : Январь 03, 2009, 23:54 »

QuaZIP может быть поможет  Улыбающийся
Записан
CuteBunny
Гость
« Ответ #3 : Апрель 28, 2010, 04:34 »

не хочет этот QuaZip собиратся у меня... юзаю Qt4.6.1+mingw В замешательстве

suxxx
Записан
CuteBunny
Гость
« Ответ #4 : Апрель 28, 2010, 08:57 »

Ладно, кому интересно, в попу этот QuaZip, юзаю 7-Zip + QProcess и никаких проблем
Записан
crossly
Гость
« Ответ #5 : Апрель 28, 2010, 12:05 »

не хочет этот QuaZip собиратся у меня... юзаю Qt4.6.1+mingw В замешательстве

suxxx
а чего не хочет??.... ошибки хоть какие....??
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Апрель 28, 2010, 12:56 »

На свой страх и риск можно заюзать заприваченные класы QZipReader и QZipWriter (src\gui\text\qzipwriter_p.h, src\gui\text\qzipreader_p.h)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ufna
Гость
« Ответ #7 : Апрель 28, 2010, 16:53 »

в 4.6.2 этими классами отлично все управляется, если операции по общей загрузки/выгрузки в архив, оно не умело "по отдельным файлам". Если надо, сброшу реализацию.
Записан
Nimbus
Гость
« Ответ #8 : Июнь 28, 2010, 05:12 »

На свой страх и риск можно заюзать заприваченные класы QZipReader и QZipWriter (src\gui\text\qzipwriter_p.h, src\gui\text\qzipreader_p.h)
Эти классы как-то странно работают. Всё отлично запаковывают, а потом распаковывают. Но reader не может распаковать архивы, запакованные через WinRAR методом ZIP с любым сжатием.

Провёл дебаг - QZipReader получает неправильыне данные о файле в архиве через метод QZipPrivate::fillFileInfo.
Почему-то все значения (isFile, isDir, isSymLink) структуры QZipReader::FileInfo получаются равными нулю.

Ясно, что проблема в получении информации о файлах в архиве.
Код
C++ (Qt)
void QZipReaderPrivate::scanFiles()
{
   //...
   for (i = 0; i < num_dir_entries; ++i) {
       FileHeader header;
       int read = device->read((char *) &header.h, sizeof(CentralFileHeader)); //<- Вот здесь записывается неправильная информация в заголовок
       //...
   }
}
 
Во вложении архив, в архиве 1.zip - это архив запакованный через QZipWriter, а 2.zip - архив, запакованный WinRAR'ом.
Оба прекрасно открываются WinRAR'ом. Но вот, 2.zip не хочет извлекаться QZipReader'ом.

Погуглил, нашёл альтернативные классы для ZIP-архивации. http://code.google.com/p/osdab/source/browse/trunk/OSDaB-Zip
Протестирую - отпишусь.

Работает! Правда, пришлось закомментировать некоторые куски кода, например:
Код
C++ (Qt)
if (!skipEntry && buffer1[UNZIP_CD_OFF_VERSION] > UNZIP_VERSION)
{
qDebug() << "Unsupported PKZip version. Skipping file.";
skipEntry = true;
}
 
Очень хорошие исходники, по которым удобно проводить дебаг.
« Последнее редактирование: Июнь 28, 2010, 07:44 от JC » Записан
ритт
Гость
« Ответ #9 : Июнь 28, 2010, 11:23 »

попробуй применить этот патч - http://qt.gitorious.org/~ritt.k/qt/ritts_qt/commit/4f8968cf2966ba6e564c8aa646fffdce3708fa72
точнее, его часть, касающуюся src/gui/text/qzip.cpp
и протестировать QZipReader с 2.zip ещё раз
Записан
dr_Begemot
Гость
« Ответ #10 : Июль 05, 2010, 13:11 »

Ладно, кому интересно, в попу этот QuaZip, юзаю 7-Zip + QProcess и никаких проблем

Очень интересно, а можно поподробней как юзаете, порядок действий и пример мб?
Записан
Alp
Гость
« Ответ #11 : Июль 05, 2010, 13:18 »

Легко и не напряжно пишется обертка вокруг zlib, тем более, что пример есть - minizip из её же комплекта.
Если есть время - вот моё вариант, разбирайся.
Записан
dr_Begemot
Гость
« Ответ #12 : Июль 05, 2010, 13:54 »

Легко и не напряжно пишется обертка вокруг zlib, тем более, что пример есть - minizip из её же комплекта.
Если есть время - вот моё вариант, разбирайся.

Так вы zlib оешили юзать или 7-zip?
Тот пример что вы мне скинули, там pro-файла под qt нет?
Записан
dr_Begemot
Гость
« Ответ #13 : Июль 06, 2010, 11:29 »

А вы под линуксом собираете или под виндами?
Записан
dr_Begemot
Гость
« Ответ #14 : Июль 06, 2010, 11:52 »

Что за проект zlibstat? Это единственный проект который скомпилился...
При попытке скомпилить minzip пишет cannot open file 'x86\ZlibDllDebug\zlibwapi.lib'
Некоторые другие проекты ругаются на cannot open file '..\..\masmx86\match686.obj'
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 23.