使用zlib库解压zip文件

代码拓荒者
• 阅读 9506

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里面contribminizip目录下的.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了

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
3年前
Linux下安装nginx实现伪分布
1.安装Nginx的编译环境gccyuminstallgccc2.nginx的http模块使用pcre解析正则表达式,所以安装perl兼容的正则表达式库yuminstallypcrepcredevel3.nginx使用zlib对http包的内容进行gzipyum
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
Nginx学习笔记——安装
Nginx安装linux安装下载tar.gz包,以及依赖openssl、zlib、pcreopenssl、zlib、pcre安装cd对应目录 ./configuremakemakeinstallnginx安装cd对应目录./configure
Stella981 Stella981
3年前
Docker容器内部安装Nginx
_摘要:_ Docker容器下环境安装Nginx笔记,中途遇到些问题希望高手指教。1、下载依赖包和Nginxwget http://zlib.net/zlib1.2.11.tar.gz(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fzlib.net%2Fzlib1.2.11
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
代码拓荒者
代码拓荒者
Lv1
好坏都忍住,也算是进步。
文章
2
粉丝
0
获赞
0