Zlib、minizip的编译和使用



Windows10、vs2008、zlib-1.2.11,Debug 32

(来源于万能的网友,我只是搬运工、总结者)

1、Zlib编译

官网下载最新版的zlib-1.2.11
按照网上的教程,用VS2008命令提示执行..\zlib-1.2.11\contrib\masmx86\bld_ml32.bat,生成inffas32.lst、inffas32.obj、match686.lst、match686.obj四个文件

用vs打开 ..\zlib-1.2.11\contrib\vstudio\vc9\zlibvc.sln,,预处理器中加入ZLIB_WINAPI、ASMV、ASMINF,,编译生成zlibwapi.dll、zlibwapi.lib、zlibstat.lib,,目录在..\\zlib-1.2.11\contrib\vstudio\vc9\x86

 https://files.cnblogs.com/files/xuerongyi/zlib-1.2.11-%E7%BC%96%E8%AF%91%E5%90%8E.rar

2、Zlib压缩、解压

主要的是两个函数:compress和uncompress

int compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); //用于将源缓冲区数据压缩到目的缓冲区

int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); //用于将源缓冲区数据解压到目的缓冲区

注意:使用多字节字符集;在共享DLL中使用MFC;附加包含目录,加上zconf.h、zlib.h两个文件;预处理器中加入ZLIB_WINAPI、ASMV、ASMINF;附加库目录,附加依赖项zlibstat.lib。

https://files.cnblogs.com/files/xuerongyi/zlib%E5%8E%8B%E7%BC%A9-%E8%A7%A3%E5%8E%8B.rar

 3、minizip压缩

思路:

压缩:

  (1)zipOPen(const char *pathname, int append);  //新建空的zip文件

  (2)zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi, const void* extrafield_local, uInt size_extrafield_local, const void* extrafield_global,

              uInt size_extrafield_global, const char* comment, int method, int level); //添加一个文件到创建好的zip文件中

  (3)zipWriteInFileInZip (zipFile file, const void* buf, unsigned len);  //读取文件内容并写入到zip文件

  (4)zipCloseFilelnZip ;//关闭当前zip文件

  (5)zipClose; //关闭Zip文件

解压:

       (1)unzFile unzOpen(const char *path);    //调用unzOpen()函数打开一个zip压缩文件,其参数是zip压缩文件的路径。

  (2)int unzGetGlobalInfo(unzFile file, unz_global_info *pglobal_info);  //调用unzGetGlobalInfo()函数来获取zip压缩文件的一些信息(如内部文件个数等),这些信息会保存在传入参数pglobal_info中。

  (3)int unzGoToNextFile(unzFile file);   //然后开始遍历zip文件中的内部文件,初始时会自动定位到第一个内部文件,处理完一个内部文件后可以使用unzGoToNextFile()函数来跳转到下一个内部文件。

  (4)int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, 

                                                          uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize);

                 //对于每个内部文件来说,可以先调用unzGetCurrentFileInfo()函数来获取该内部文件信息(如文件的路径、文件大小等),这些信息会保存在传入参数pfile_info中。

  (5)int unzOpenCurrentFile(unzFile file);  //调用unzOpenCurrentFile()函数打开该内部文件。

  (6)int unzReadCurrentFile(unzFile file, voidp buf, unsigned len);  //调用unzReadCurrentFile()函数读取该内部文件内容。

  (7)int unzCloseCurrentFile(unzFile file);  //该内部文件读取完毕之后,调用unzCloseCurrentFile()函数对内部文件进行关闭。

  (8)int unzClose(unzFile file);   //zip文件中的所有内部文件遍历完成之后,调用unzClose()函数关闭打开的zip压缩文件。

注意:预处理器中加入ZLIB_WINAPI,附加包含目录(Zlib下的minizip文件夹),附加库目录(Zlib生成的dll、lib文件)

https://files.cnblogs.com/files/xuerongyi/minizip%E5%8E%8B%E7%BC%A9-%E8%A7%A3%E5%8E%8B.rar

 

Zlib是流协议,WinRAR是文件协议

WinRAR在打开Zlib压缩的文件时,会找不到文件标志这些头文件,因为zlib压缩只包含了压缩标志和长度信息等,所以打不开

引入minizip,minizip压缩的文件是可以用WinRAR打开的

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM