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