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了