实战经验:使用minizip压缩解压文件

实战经验:使用minizip压缩解压文件

作者:BlogUpdater |  时间:2018-06-03 |  浏览:16871 |  评论已关闭 条评论

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)
标签:

评论已关闭。