Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Qt и работа с архивами


Автор: bronislav 29.1.2008, 16:20
Как работать с архивами (zip, gzip, ...) в Qt?


Автор: SABROG 29.1.2008, 16:46
Цитата(bronislav @ 29.1.2008,  16:20)
Как работать с архивами (zip, gzip, ...) в Qt?

Есть методы qCompress/qUncompress, в основе лежит zlib. Найдешь инфу как распаковать zip файлы через zlib - найдешь ответ на свой вопрос, иначе использование сторонних библиотек.

Автор: Любитель 29.1.2008, 16:52
Если именно с архивами - то встроенных средств нет.

Автор: bronislav 29.1.2008, 16:52
Цитата(SABROG @ 29.1.2008,  16:46)
Цитата(bronislav @ 29.1.2008,  16:20)
Как работать с архивами (zip, gzip, ...) в Qt?

Есть методы qCompress/qUncompress, в основе лежит zlib. Найдешь инфу как распаковать zip файлы через zlib - найдешь ответ на свой вопрос, иначе использование сторонних библиотек.

Как важно дать иногда толчок в правильном направлении. Спасибо. Счас разбираюсь

Автор: Elfebet 29.1.2008, 16:56
можна заюзать сторонний опенсоурс LiteZip/LiteUnZip (не зависимо какая платформа, это обычный с++)

http://www.artpol-software.com/Download.aspx

Автор: SABROG 29.1.2008, 17:24
Хотел еще предложить http://www.nih.at/libzip/index.html, но мне не удалось его собрать под mingw, какой-то косяк с libtoolом:

Цитата

libtool: link: cannot build libtool library `libzip.la' from non-libtool objects on this host: mkstemp.o




Автор: bronislav 29.1.2008, 17:57
Цитата(Elfebet @ 29.1.2008,  16:56)
можна заюзать сторонний опенсоурс LiteZip/LiteUnZip (не зависимо какая платформа, это обычный с++)

странно.. при компиляции попросил afx.h и afxwin.h

это вообщето для MFC, зачем они там? О_о

вот  лог компиляции

Код

------ Build started: Project: ZipArchive, Configuration: Debug DLL Win32 ------
Compiling...
cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release
BaseLibCompressor.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
DeflateCompressor.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
DirEnumerator.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
FileFilter.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
Wildcard.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipArchive.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipAutoBuffer.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipCentralDir.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipCompatibility.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipCompressor.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipCrc32Cryptograph.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipCryptograph.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipException.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipExtraData.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipExtraField.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipFile_mfc.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipFileHeader.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipMemFile.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipPathComponent_win.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipPlatform_win.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
Generating Code...
Compiling...
ZipPlatformComm.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipStorage.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
ZipString.cpp
d:\lib\zip\ziparchive_src\ziparchive\std_mfc.h(33) : fatal error C1083: Cannot open include file: 'afx.h': No such file or directory
Generating Code...
Creating browse information file...
Microsoft Browse Information Maintenance Utility Version 9.00.21022
Copyright (C) Microsoft Corporation. All rights reserved.
BSCMAKE: error BK1506 : cannot open file '.\Debug DLL\BaseLibCompressor.sbr': No such file or directory
Build log was saved at "file://d:\lib\zip\ziparchive_src\ZipArchive\Debug DLL\BuildLog.htm"
ZipArchive - 24 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Автор: Elfebet 29.1.2008, 18:10
Ну значит ZipArchive юзает функции mfc, если компилить в студии, ну если тебе ето беспокоит там еще есть файлы проекта для минжв, борлана, линуха (попробуй другим компилятором)

Автор: bronislav 29.1.2008, 18:14
Цитата(Elfebet @ 29.1.2008,  18:10)
Ну ZipArchive юзает функции mfc для windows  smile

Все  уже разобрался  smile 

to SABROG
а как из QByteArray вытащить файлы?

у меня в архиве 3 файла, как мне получить их содержимое?

Автор: bronislav 30.1.2008, 12:22
Цитата(Elfebet @ 29.1.2008,  18:10)
Ну значит ZipArchive юзает функции mfc, если компилить в студии, ну если тебе ето беспокоит там еще есть файлы проекта для минжв, борлана, линуха (попробуй другим компилятором)

Меня это не беспокоит, но дело в том, что я поставил Platform SDK, для того чтобы появились afx.h и иже с ним, но опять пошли ошибки непонятного происхождения. Буду разбираться



Автор: Любитель 30.1.2008, 13:10
В PSDK MFC не входит.

Автор: bronislav 30.1.2008, 13:20
Цитата(Любитель @ 30.1.2008,  13:10)
В PSDK MFC не входит.

Наверно в этом все дело.
Выбрал Debug STL и все прекрасно собралось

теперь при указании в .pro файле библиотеки ZipArchive.lib

Код

TEMPLATE = app
TARGET = FinReporter

CONFIG += console

Qt += xml

UI_DIR = src\uic
MOC_DIR = src\moc

SOURCES = src\main.cpp src\mainwindow.cpp src\dbase.cpp
HEADERS = src\mainwindow.h src\dbase.h
FORMS    = src\forms\mainwindow.ui
LIBS   += "src\lib\zip\Debug STL\ZipArchive.lib"



получается такие ошибки 
Код

------ Build started: Project: FinReporter, Configuration: Debug Win32 ------
Performing Makefile project actions
Microsoft (R) Program Maintenance Utility   Version 7.00.8882
Copyright (C) Microsoft Corp 1988-2000. All rights reserved.
 nmake -f Makefile.Debug
Microsoft (R) Program Maintenance Utility   Version 7.00.8882
Copyright (C) Microsoft Corp 1988-2000. All rights reserved.
 link /LIBPATH:"d:\lib\qt-4.3.3\lib" /NOLOGO /DEBUG /SUBSYSTEM:CONSOLE /MANIFESTFILE:"debug\FinReporter.intermediate.manifest" /OUT:debug\FinReporter.exe @D:\TEMP\nm4FD.tmp 
dbase.obj : error LNK2019: unresolved external symbol "public: bool __thiscall CZipArchive::ExtractFile(unsigned short,unsigned short const *,bool,unsigned short const *,unsigned long)" (?ExtractFile@CZipArchive@@QAE_NGPBG_N0K@Z) referenced in function "public: void __thiscall FinDataBase::newBase(class QString)" (?newBase@FinDataBase@@QAEXVQString@@@Z)
dbase.obj : error LNK2019: unresolved external symbol "public: bool __thiscall CZipArchive::Open(unsigned short const *,int,unsigned long)" (?Open@CZipArchive@@QAE_NPBGHK@Z) referenced in function "public: void __thiscall FinDataBase::newBase(class QString)" (?newBase@FinDataBase@@QAEXVQString@@@Z)
debug\FinReporter.exe : fatal error LNK1120: 2 unresolved externals
NMAKE : fatal error U1077: 'link' : return code '0x460'
Stop.
NMAKE : fatal error U1077: 'C:\lib\platform_sdk\Bin\nmake.exe' : return code '0x2'
Stop.
Project : error PRJ0019: A tool returned an error code from "Performing Makefile project actions"
Build log was saved at "file://d:\FILE\projects\finreporter\Debug\BuildLog.htm"
FinReporter - 6 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Автор: Elfebet 30.1.2008, 15:35
ну если ты это все дело делаеш под виндой и в студии, достаточно скомпилить ZipArchive, полученую длл кинь рядом с проектом, в свойствах проектах пропиши ее (в студии проперти, но не в .pro), добавь в свой проект header файла с описаными функциями "ZipArchive.h"... вроде все...
или
юзай длл через QLibrary, а вот насчет чтобы статически прилинковать - хз.

Автор: bronislav 31.1.2008, 12:55
Цитата(Elfebet @ 30.1.2008,  15:35)
ну если ты это все дело делаеш под виндой и в студии, достаточно скомпилить ZipArchive, полученую длл кинь рядом с проектом, в свойствах проектах пропиши ее (в студии проперти, но не в .pro), добавь в свой проект header файла с описаными функциями "ZipArchive.h"... вроде все...
или
юзай длл через QLibrary, а вот насчет чтобы статически прилинковать - хз.

Для того, что бы скомпилировать ZipArchive как DLL необходима Visual Studio не Express т.к. mfc42d.lib для x32 не идет в Express и Platform SDK.

Если кто нибудь может выложить уже собраный ZipArchive как DLL буду благодарен, ибо не хочу ставить ломаную VC++ Professianal.


Автор: Elfebet 31.1.2008, 15:43
Цитата

Если кто нибудь может выложить уже собраный ZipArchive как DLL буду благодарен, ибо не хочу ставить ломаную VC++ Professianal.

Автор: bronislav 31.1.2008, 16:09
Цитата(Elfebet @ 31.1.2008,  15:43)
Цитата

Если кто нибудь может выложить уже собраный ZipArchive как DLL буду благодарен, ибо не хочу ставить ломаную VC++ Professianal.

спс

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)