minizip -基于zlib开源代码库

转载:https://www.topomel.com/archives/979.html

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调用是否失败。

伪代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
新建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文件

伪代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
打开Zip文件(unzOpen64)
获取全局信息(unzGetGlobalInfo64)
for (从全局信息中获取所有Zip文件并遍历)
     获取当前文件信息(unzGetCurrentFileInfo64)
     if (当前Zip文件是目录)
         创建目录
     else
         打开Zip文件(unzOpenCurrentFile)
         打开目标文件( fopen )
         while (Zip文件读取成功)
             读取Zip文件(unzReadCurrentFile)
             写入目标文件( fwrite )
         关闭目标文件( fclose )
     关闭当前Zip文件(unzCloseCurrentFile)
     准备处理下一个Zip文件(unzGoToNextFile)
关闭Zip文件(unzClose)

猜你喜欢

转载自www.cnblogs.com/jly594761082/p/10368578.html