使用zlib库解压zip文件
2013-3-13
1.首先到zlib官网上去下载zlib库
当前最新版是1.2.7
要下编译好的: zlib127-dll.zip
再下源码包:zlib127.zip //主要是抠出里面zip文件操作的例子2.随便写个测试程序, 使用Qt搭建一个工程
3.Qt中引用zlib库的dll文件目录
#include "./Zlib/include/zip.h" #include "./Zlib/include/unzip.h" #pragma comment(lib, "./Zlib/lib/zdll.lib")
4.把zlib127.zip里面contrib\minizip目录下的.c和.h源文件(除了minzip.c和minunz.c两个文件外)拷贝出来放到Qt工程目录下, Qt工程目录添加这些.c文件进来
5.解压zip文件程序:
unz_file_info64 FileInfo; unzFile zFile = unzOpen64("d:/biji.zip"); if(NULL == zFile) qDebug() << "zero!"; else qDebug() << "haha"; unz_global_info64 gi; if (unzGetGlobalInfo64(zFile, &gi) != UNZ_OK) { qDebug() << "ho no"; } int result; for (int i = 0; i < gi.number_entry; ++i) { char file[256] = {0}; char ext[256] = {0}; char com[1024] = {0}; if (unzGetCurrentFileInfo64(zFile, &FileInfo,file,sizeof(file),ext,256,com,1024)!= UNZ_OK) qDebug() << "error"; qDebug() << file << ":" << ext << ":" << com; if(!(FileInfo.external_fa & FILE_ATTRIBUTE_DIRECTORY)) //文件,否则为目录 //打开文件 result=unzOpenCurrentFile(zFile);/* 无密码 */ result=unzOpenCurrentFilePassword(zFile,"szPassword"); /* 有密码 */ char data[1024] = {0}; int size; //读取内容 QString path = QString("d:/zip/") + file; QFile f(path); f.open(QFile::WriteOnly); while(true) { size= unzReadCurrentFile(zFile,data,sizeof(data)); if(size <= 0) break; // QString str; // str = QString::fromLocal8Bit(data, size); f.write(data, size); } f.close(); //关闭当前文件 unzCloseCurrentFile(zFile); //出错 if(i < gi.number_entry - 1 && unzGoToNextFile(zFile) != UNZ_OK) qDebug() << "error2"; } unzClose(zFile);
ok了