minizlib
ZLIB开源库采用的是DEFLATE压缩算法,已经不支持加密功能,实际上功能还存在于代码中,采用MINIZIP可以支持对ZIP文件的加解密。
ZLIB目前最新的是1.2.7,MINIZIP最新的版本是1.1。
采用ZLIB可以解压缩任何ZIP文件,也可以压缩成ZIP文件被WINZIP/WINRAR/7Z等工具打开。
注意:如果采用了加密功能,ZLIB加密的文件只能被ZLIB解开,WINRAR/WINZIP打不开,7Z可以打开,但其它工具加密的ZIP文件ZLIB可以打开,令人费解,
长期不支持加密失去维护造成的。
注:已经确认调用zipOpenNewFileInZip4前需要用crc32函数计算文件CRC值,当做参数传入函数即可,具体代码参照minizip.c文件。
采用MINIZIP进行文件压缩:
如果要支持加密,需要屏蔽unzip.c中的NOUNCRYPT宏定义。
创建压缩流
zipFile zf=NULL;
zf = zipOpen64(zipFile,0);
压缩文件
zip_fileinfo FileInfo;
ZeroMemory(&FileInfo, sizeof(FileInfo));
zipOpenNewFileInZip4(zf,buf, &FileInfo, NULL, 0, NULL, 0, NULL, Z_DEFLATED,level,0, -MAX_WBITS, DEF_MEM_LEVEL,
Z_DEFAULT_STRATEGY,password, 0, 0, ZIP_GPBF_LANGUAGE_ENCODING_FLAG);
注意buf为文件名,password为空时需要给NULL,level为压缩比,9为最高,0最低。
写入压缩文件
zipWriteInFileInZip(zf,data,size)
关闭当前文件
zipCloseFileInZip(zf);
关闭流
zipClose(zf,0);
采用MINIZIP进行文件解压缩:
unzFile uf=NULL;
unz_global_info64 gi;
unz_file_info64 FileInfo;
打开zip文件
uf = unzOpen64(szZipFile);
result=unzGetGlobalInfo64(uf, &gi);
if (result != UNZ_OK)
throw “文件错误”;
循环解压缩文件
for(int i=0;i<gi.number_entry;++i)
{
if (unzGetCurrentFileInfo64(uf, &FileInfo,file,sizeof(file),NULL,0,NULL,0)!= UNZ_OK)
throw “文件错误”;
if(!(FileInfo.external_fa & FILE_ATTRIBUTE_DIRECTORY)) //文件,否则为目录
//打开文件
result=unzOpenCurrentFile(uf);/* 无密码 */
result=unzOpenCurrentFilePassword(uf,szPassword); /* 有密码 */
//读取内容
size= unzReadCurrentFile(uf,data,size);
//关闭当前文件
unzCloseCurrentFile(uf);
//出错
if(i < gi.number_entry - 1 && unzGoToNextFile(uf) != UNZ_OK)
throw “error”;
}
关闭流
unzClose(uf);
minizlib的更多相关文章
- 问题: 揭秘Angualr2 书上问卷调查
npm install 初夏下面问题: 0 info it worked if it ends with ok1 verbose cli [ '/home/linux_ubuntu164/tools/ ...
- ES系列二、CentOS7安装ES head6.3.1
1.Head插件简介 ElasticSearch-head是一个H5编写的ElasticSearch集群操作和管理工具,可以对集群进行傻瓜式操作. 显示集群的拓扑,并且能够执行索引和节点级别操作 搜索 ...
- gdal3.1.0+VS2017+geos+kml编译总结
1.简介 gdal3.1.0编译过程中必须依赖proj,编译gdal必须要编译proj,proj的编译需要sqlite3,因此想要编译gdal3.1.0需要先编译proj和sqlite3 2.关于sq ...
- Entrypoint undefined = index.html html-webpack-plugin 错误ERROR in Error: Child compilation failed: Module build failed (from ./node_modules/html-webpack-plu SyntaxError: Unexpected token )
Entrypoint undefined = index.html html-webpack-plugin 错误 ERROR in Error: Child compilation failed: M ...
随机推荐
- 今日SGU 5.3
SGU 107 题意:输入一个N,表示N位数字里面有多少个的平方数的结尾9位是987654321 收获:打表,你发现相同位数的数相乘结果的最后几位,就和那两个相乘的数最后几位相乘一样,比如3416*8 ...
- CodeForces 159c String Manipulation 1.0
String Manipulation 1.0 Time Limit: 3000ms Memory Limit: 262144KB This problem will be judged on Cod ...
- 高速入手ITOO导入-改进导入.xlsx格式
这两天一直在研究师哥的导入,在他的基础上进行了一些改进.这次的改进就是能够导入还有一种格式.xlsx格式的.经过几番调试和看师哥写的底层代码最终知道哪里的问题了. workbook = new HSS ...
- 23. Node.Js Buffer类(缓冲区)-(三)文件读取实例
转自:https://blog.csdn.net/u011127019/article/details/52513109
- 4.dubbo-demo+简易监控中心安装+管理控制台安装
转自:https://blog.csdn.net/zhangweigangweiwu/article/details/52244099 tomcat:apache-tomcat-6.0.39 需要用到 ...
- Java学习笔记二.1
和其他高级语言类似,Java也具有以下部分 1.关键字:见下表,注意Java严格区分大小写,关键字都是小写 2.标识符:见下图 3.注释.有两种://(单行注释)和/**/(多行注释).还有一种文档注 ...
- C# 截取中英文混合字符串分行显示宽度相同
/// <summary> /// 截取方法名显示宽度 /// </summary> /// <param name=" ...
- java DSA Signature Sign And Verify
SignatureSignAndVerify import java.security.KeyPair; import java.security.KeyPairGenerator; import j ...
- position(static-relative-absolute-fixed),margin(top-right-bottom-left),top-right-bottom-left
最近写css遇到一些问题,所以准备写下来捋一下思路. 1.position=satic下看margin的使用.(top-right-bottom-left在这种case下无效) 1-1)margin ...
- BZOJ3672: [Noi2014]购票(CDQ分治,点分治)
Description 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会. 全国的城市构成了一棵以SZ市为根的有根树 ...