实战经验:使用minizip压缩解压文件
作者:BlogUpdater |
时间:2018-06-03 |
浏览:19824 |
评论已关闭 条评论
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)
如需转载,请注明来自:Topomel Box
相关推荐
- 新玩意:使用vcpkg来管理你的C++代码库
- Posted on 08月03日
- 不要被各种专业术语吓倒
- Posted on 11月29日
- 小技巧:快速添加项目到列表控件
- Posted on 04月05日
- 原子性操作并非银弹
- Posted on 10月19日
评论已关闭。