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打开的