使用zlib库解压zip文件

时间:2022-12-26 23:18:50

2013-3-13

1.首先到zlib官网上去下载zlib库

http://www.zlib.net/

当前最新版是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了