实战经验:使用minizip压缩解压文件
作者:BlogUpdater |
时间:2018-06-03 |
浏览:20926 |
评论已关闭 条评论
minizip是一套用来压缩和解压文件的工具,其基于zlib开源代码库。今天来汇总一下使用minzip压缩解压文件的代码片段。
压缩文件
使用minizip压缩文件,我们一般使用如下的几个函数:
zipOpen2_64:新建一个空的Zip文件
zipOpenNewFileInZip3_64:添加一个文件到之前创建好的Zip文件中
zipWriteInFileInZip:读取文件内容并写入到Zip文件
zipCloseFileInZip:关闭当前Zip文件
zipClose: 关闭Zip文件
这里有几个地方需要注意:
1) 在调用zipOpenNewFileInZip3_64在Zip文件中添加文件之前,我们需要计算文件的CRC效验码和文件的时间戳信息,否则,会出现生成的Zip文件解压时头部错误的问题。
2) 读取文件并写入Zip文件过程中,我们需要使用循环的方式,每次对文件读取一定的字节,并注意检查是否到达文件尾(EOF),同时需要检查zipWriteInFileInZip调用是否失败。
伪代码如下:
新建Zip文件(zipOpen2_64) 获取源文件时间戳信息(filetime) 在Zip中创建新文件(zipOpenNewFileInZip3_64) 打开源文件(fopen) do { 读取源文件一定字节(fread) 写入到Zip文件(zipWriteInFileInZip) } while (源文件未到达EOF) 关闭源文件(fclose) 关闭Zip当前文件(zipCloseFileInZip) 关闭Zip文件(zipClose)
解压Zip文件
在解压一个Zip文件时,我们需要使用的函数如下:
unzOpen64:打开Zip文件
unzGetGlobalInfo64:获取Zip文件的全局信息
unzGetCurrentFileInfo64:获取当前文件信息
unzOpenCurrentFile:打开Zip中的文件
unzReadCurrentFile:读取文件内容
unzCloseCurrentFile:关闭当前文件
unzGoToNextFile:准备读取Zip文件中的下一个文件
unzClose:关闭Zip文件
伪代码如下:
打开Zip文件(unzOpen64) 获取全局信息(unzGetGlobalInfo64) for (从全局信息中获取所有Zip文件并遍历) 获取当前文件信息(unzGetCurrentFileInfo64) if (当前Zip文件是目录) 创建目录 else 打开Zip文件(unzOpenCurrentFile) 打开目标文件(fopen) while (Zip文件读取成功) 读取Zip文件(unzReadCurrentFile) 写入目标文件(fwrite) 关闭目标文件(fclose) 关闭当前Zip文件(unzCloseCurrentFile) 准备处理下一个Zip文件(unzGoToNextFile) 关闭Zip文件(unzClose)
如需转载,请注明来自:拓扑梅尔智慧办公平台 | TopomelBox 官方站点
相关推荐
- Visual Studio Code C++扩展7月更新汇总
- Posted on 07月29日
- PAE真的能提升虚拟地址空间吗
- Posted on 09月18日
- 官宣另一个官宣:MySQL在VS2019上的构建和调试
- Posted on 09月01日
- 新的页面保护层级:可读但不可执行
- Posted on 07月04日
评论已关闭。