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