• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-90  評論-947  文章-0  trackbacks-0

            實際應用中有時候會遇到需要處理 ZIP 壓縮解壓的情況,這時候我們有大概三種選擇:

            1. 調用 rar.exe, unzip.exe 等
            2. 使用某現成庫
            3. 完全手寫

            第一種雖然能完成任務,但是沒法知曉結果。曾經有人對說,可以抓命令行輸出結果來判斷……這種依靠界面文字來進行精確判斷的行為個人認為相當不靠譜。第三種,既然我是個“造輪主義”者,當然說好,但是現在我不了解 ZIP 格式,也不了解 ZIP 算法,所以這個日后再說。今天我們就來切切實實地用一次輪子。

            ZIP 相關的庫中比較有名的可能就是 ZLib 和 InfoZip(unzip60)了。InfoZip 我了解的不多,其外層接口似乎也不大好,一堆回調——回調是個很煩人的東西,專門用來打亂代碼結構。另外,這個庫也已經有好多年沒更新了吧,太久的東西給人的感覺總是不太舒服。ZLib 最新版本是 1.2.5,今年 4 月 19 日出的。確切的說,ZLib 可能并不是一個針對 ZIP 文件的庫,它只是一個針對 gzip 以及 deflate 算法的庫。它提供了一個叫做 minizip (contrib\minizip) 例子來給出操作 ZIP 文件的方法。下文將從 ZLib 出發,歸結出兩個傻瓜接口:

            BOOL ZipCompress(LPCTSTR lpszSourceFiles, LPCTSTR lpszDestFile);
            BOOL ZipExtract(LPCTSTR lpszSourceFile, LPCTSTR lpszDestFolder);

            要引入的源文件

            1. ZLib 主目錄下的代碼,除 minigzip.c、example.c 外;
            2. contrib\minizip 下的代碼,除 minizip.c、miniunz.c 外。

            相關 API

            雖然 minizip 更像是個例子,但是除去其主程序 minizip.c 和 miniunz.c 后,剩下的部分我們可以看作是 ZLib 的一個上層庫,它封裝了與 ZIP 文件格式相關的操作。而 minizip.c 和 miniunz.c 就是我們要改寫的——把它從命令行程序改為上述傻瓜接口。minizip.c 和 miniunz.c 中用到的 API 主要有:

            壓縮相關:

            1. zipOpen64
            2. zipClose
            3. zipOpenNewFileInZip
            4. zipCloseFileInZip
            5. zipWriteInFileInZip

            解壓相關:

            1. unzOpen64
            2. unzClose
            3. unzGetGlobalInfo64
            4. unzGoToNextFile
            5. unzGetCurrentFileInfo64
            6. unzOpenCurrentFile
            7. unzCloseCurrentFile
            8. unzReadCurrentFile

            想必看到這些名字都能猜到怎么用了吧。好的接口果然能帶給人愉悅的。minizip 中的這些函數有的是帶“64”的有的是不帶的,有的還有“2”、“3”、“4”版本。這里一律用帶 64 的,不帶“2”、“3”、“4”的。

            具體操作

            下文涉及的所有操作,其相關代碼都可以在 http://zlibwrap.codeplex.com/ 上找到(Change Set 2450)。這里就不貼長篇代碼了。另外有個 DLL版本Lib版本,供拿來主義者用。

            首先是壓縮操作。使用 zipOpen64 來打開/創建一個 ZIP 文件,然后開始遍歷要被放到壓縮包中去的文件。針對每個文件,先調用一次 zipOpenNewFileInZip,然后開始讀原始文件數據,使用 zipWriteInFileInZip 來寫入到 ZIP 文件中去。zipOpenNewFileInZip 的第三個參數是一個 zip_fileinfo 結構,該結構數據可全部置零,其中 dosDate 可用于填入一個時間(LastModificationTime)。它的第二個參數是 ZIP 中的文件名,若要保持目錄結構,該參數中可以保留路徑,如 foo/bar.txt。

            解壓操作稍微復雜一點點。打開一個 ZIP 文件后,需要先使用 unzGetGlobalInfo64 來取得該文件的一些信息,來了解這個壓縮包里一共包含了多少個文件,等等。目前我們用得著的就是這個文件數目。然后開始遍歷 ZIP 中的文件,初始時自動會定位在第一個文件,以后處理完一個后用 unzGoToNextFile 來跳到下一個文件。對于每個內部文件,可用 unzGetCurrentFileInfo64 來查內部文件名。這個文件名和剛才 zipOpenNewFileInZip 的第二個參數是一樣的形式,所以有可能包含路徑。也有可能會以路徑分隔符(/)結尾,表明這是個目錄項(其實壓縮操作的時候也可以針對目錄寫入這樣的內部文件,上面沒有做)。所以接下來要根據情況創建(多級)目錄。unzGetCurrentFileInfo64 的第三個參數是 unz_file_info64 結構,其中也有一項包含了 dosDate 信息,可以還原文件時間。對于非目錄的內部文件,用 unzOpenCurrentFile,打開,然后 unzReadCurrentFile 讀取文件內容,寫入到真實文件中。unzReadCurrentFile 返回 0 表示文件讀取結束。

            局限性

            1. 只能壓縮、解壓采用 deflate 算法的 ZIP 文件。(不過此類 ZIP 應該占了絕大多數)
            2. 由于 minizip 中相關 API 的限制,以及 ZIP 文件格式的限制,被壓縮/解壓的相關文件名必須與系統的當前代碼頁相符合。(雖然 ZIP 格式最近一次更新加入了使用 UTF8 編碼文件名的選項,但是不能保證所遇到的 ZIP 文件都是新格式的,minizip 中似乎也沒有針對此選項做什么動作。)

            尾聲

            這是一篇低俗的文章,沒有什么思想性。僅僅是一個小記。有不當之處歡迎批評指正。

             

            祝大家中秋節快樂!

            posted on 2010-09-22 23:57 溪流 閱讀(46735) 評論(75)  編輯 收藏 引用 所屬分類: C++

            評論:
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-23 12:34 | ok
            visio 2010 破解怎么下載  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-24 22:52 | Corner Zhang
            不錯 對我有用!  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-28 17:26 | tomren
            及時雨!  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-29 10:46 | tomren
            解壓縮的時候如果多級目錄會有問題,我那個里面有3層~~謝謝啦  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-29 20:48 | 溪流
            @tomren
            感謝告知,現在加班,等回去測試~  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-29 22:10 | 溪流
            @tomren
            謝謝指出,確實有此問題,已修復。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-09-30 16:04 | tomren
            我只用到解壓的,直接用zLib我不會~~  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-10-03 21:43 | roger
            如果一次壓縮幾個文件要怎么辦呢?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-10-04 00:23 | 溪流
            @roger
            目前我已給出的代碼中,可以做到壓縮一個目錄。比如把文件都放在 aaa 目錄下,然后用 ZipCompress(_T("aaa\\*"), _T("bbb.zip")) 就可以了。

            如果文件處于不同目錄中,請使用 MiniZip 的 API:

            zipOpen64 后,對于每個文件,做如下事情
            {
            先zipOpenNewFileInZip,這里有個參數Zip中的文件名,可以用來組織Zip中的文件結構
            再打開需要壓入zip中區的文件,讀取文件數據并使用zipWriteInFileInZip寫入
            最后zipCloseFileInZip
            }
            最后zipClose   回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-16 10:36 | Husiwa
            樓主是BY人吧 呵呵  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-16 11:14 | 溪流
            @Husiwa
            BY是啥?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-16 11:34 | Husiwa
            @溪流
            啊 北郵。。呵呵 也許我記錯了 好像在北郵人論壇上見過這個ID

            你這個項目是2010的。。。我這只有2008的
            改的我好辛苦啊,還沒改完  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-16 13:04 | 溪流
            @Husiwa
            呵呵,偶不是by的~  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-25 14:42 | Alemon
            @溪流
            ZWZipExtract(_T("d:\\guoh.rar"), _T("d:\\"))
            返回錯誤為,文件名 目錄名或卷標語法不對,應該怎么寫,有沒有VC6.0的版本呢?謝謝  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-25 15:31 | 溪流
            @Alemon
            只能解ZIP,解不了RAR。
              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-25 20:08 | Alemon
            @溪流
            那個是筆誤,改成ZIP后問題依舊,就是不知道為什么是那個錯誤提示  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-25 20:13 | Alemon
            @溪流
            因為手頭沒有2010,所以你的源碼也沒法用,就用了你的DLL版本,在壓縮的時候就是報文件名 目錄名或卷標語法不對,我主要用來解壓縮文件夾

            BOOL bRet = ZWZipCompress(_T("d:\\systemp.mdb"), _T("d:\\temp.zip"));

            代碼如上
              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2010-11-26 00:58 | 溪流
            @Alemon
            可能是編碼問題吧,我的DLL是Unicode的,你的工程應該是_MBCS的吧。這樣子試試:
            BOOL bRet = ZWZipCompress(L"d:\\systemp.mdb", L"d:\\temp.zip");

              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-13 11:19 | 風聲邊界
            拜讀樓主的博客,寫的很好,我已參照你的方法,寫了壓縮文件夾模塊
            但其中有個問題,就是如果在要壓縮的文件夾中存在zip文件,該如何處理
            直接將其當做普通文件創建,讀取數據,寫入數據,在解壓的時候就會報錯
            不知道此類問題,樓主有何見解,  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-13 13:47 | 溪流
            @風聲邊界
            當作普通文件處理,ZIP格式保證了其中可以含有ZIP文件。
            編譯示例代碼,運行 ZLibWrapTest.exe 測試看看?我試過好像沒問題。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-13 20:38 | weihua1984
            @溪流
            簡單的壓縮一個zip文件到zip文件中確實沒有問題
            使用winrar工具解壓剛壓縮的zip文件沒有問題,
            使用zlib解壓剛才的壓縮的zip文件時出錯了,我再檢查檢查,方便的話麻煩你也給看看這兩種情況,驗證一下
              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-13 20:47 | weihua1984
            又測試了一遍,在我的機子上測試沒有問題,今天再公司不知道哪出了點問題,謝謝!  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-27 10:12 | SOS
            請問目錄中含有空文件夾怎么壓啊,你的代碼中并沒有處理這種情況  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-27 11:34 | 溪流
            @SOS
            那就 zipOpenNewFileInZip,然后直接 zipCloseFileInZip,不要寫數據了
            我記得處理過的,等下檢查下  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-05-27 11:45 | 溪流
            @SOS
            嗯,我有處理的,目錄的話 zipOpenNewFileInZip 里那個 ZIP中的文件名加一個“/”,然后不要添加數據直接zipCloseFileInZip就可以了  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-02 16:54 | violin
            我要在vc6.0下用,改動會大嗎?支持壓縮多個文件不?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-02 17:56 | 溪流
            @violin
            如果用DLL或LIB的話,注意傳入UNICODE字符串就可以了。
            如果要源代碼方式重用的話,不知道改動大不大。
            支持多文件  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-02 21:12 | violin
            @溪流
            在vc6.0中我引入dll庫,編譯時報錯Linking...
            Main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl ZWZipExtract(char const *,char const *)" (__imp_?ZWZipExtract@@YAHPBD0@Z)
            這是什么原因呢?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-02 21:33 | violin
            @溪流
            注:我已經將ZLibWrap.lib加入到input中去了  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-02 22:08 | 溪流
            @violin
            ZLibWrap.h 改一下,所有參數里的 LPCTSTR 中的 T 改成 W。(不是去掉 T,昨天打太快了說錯了)  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-03 10:36 | violin
            @溪流
            呵呵,謝謝你的耐心回復。我按你今天的方式也弄了,LINK : fatal error LNK1196: invalid or corrupt import object: unknown version,我查了一下,估計vs2010編譯的dll,在vc6.0中還是有問題。估計得把源碼放在vc6.0中重新生成庫才行。
            還有就是昨天裝了2010,結果打開你給的源碼,想測試下代碼的效果。結果編譯不過,老是報atldef.h之類庫文件出錯。沒用過2010,不知道怎么回事。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-03 11:37 | 溪流
            @violin
            可能真要重新編譯吧,我也沒試過這樣的操作。
            后面的2010,直接打開solution編譯,應該就可以了的。你的問題我沒碰到過,同不知道怎么回事。。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2011-06-08 10:14 | neo
            由于需要,我設置不是unicode環境,編譯時說無法解析的外部符號 "__declspec(dllimport) int __cdecl ZWZipCompress(char const *,char const *)" (__imp_?ZWZipCompress@@YAHPBD0@Z),該符號在函數 _main 中被引用
            怎么辦  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2011-06-08 10:41 | neo
            看來用DLL不能用非UNICODE環境對吧?
            那我想定義一個變量,比如char str[].然后在程序運行的時候對它賦值,然后作為ZWZIPCOMPRESS的一個輸入參數,可是編譯器提示無法轉換成LPCTSTR,這怎么解決呢。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-09 00:10 | 溪流
            @neo
            看樓上的一些回答吧。
              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2011-06-09 16:25 | neo
            @溪流
            樓上并沒有說怎么轉換,不過我已經解決了,用A2T函數來轉換  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-23 09:38 | xx
            你符號鏈接(軟鏈接)怎么處理?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-23 13:25 | 溪流
            @xx
            軟硬鏈接沒有作特殊處理,看它們對 CreateFile 是否透明。這是兩個層次的概念,竊以為不該越權去處理。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-23 16:47 | xx
            文件屬性?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-06-23 22:54 | 溪流
            @xx
            ZIP格式可能無法容納文件屬性以及NTFS權限等信息。好像就一個修改時間能保存吧。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-07-08 16:25 | 11
            超過4G文件可壓縮否  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-07-19 17:12 | cy
            先下來看看。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-08-21 13:38 | 大傻(605351006@qq.com)
            太有用了,非常感謝!  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-08-26 09:51 | py
            如果壓縮要求從內存中直接壓縮到內存呢?
            解壓要求從數據流直接解壓到內存中呢?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-08-27 23:52 | 溪流
            @py
            這個跟ZIP文件無關了吧。貌似ZLIB有提供數據壓縮接口,好像直接叫compress什么的?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-09-01 09:19 | Samson
            如何使用crc呢?好像沒有使用crc的接口  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-10-29 18:46 | weihua1984
            今天使用zlib又出現問題了
            用zlib封裝了壓縮和加壓縮兩個接口
            1、文件都是gbk的時候,壓縮和解壓縮都沒有問題
            2、文件有utf8個時候的時候,壓縮,沒有問題,但是使用我的解壓縮接口時,解壓時候,此時用windows"右擊解壓" 還是可以解壓的

            所在現在不清楚是我壓縮的問題還是解壓的問題

            是不是由必要考慮文本編碼在壓縮時轉換的問題

            在局限性中你所說的

            雖然 ZIP 格式最近一次更新加入了使用 UTF8 編碼文件名的選項,但是不能保證所遇到的 ZIP 文件都是新格式的,minizip 中似乎也沒有針對此選項做什么動作。

            我應該如何理解和應對哪  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-11-17 01:06 | 溪流
            @weihua1984
            參考 http://www.pkware.com/documents/casestudies/APPNOTE.TXT 中的說明,需要將對應文件項的 General Purpose Bit Flag 標志的 BIT 11 設上。

            在 minizip 中,可以使用 zipOpenNewFileInZip4 代替上面的 zipOpenNewFileInZip,zipOpenNewFileInZip4 最后的那個參數就是剛才說的 Flag,給他傳個 0x800,同時文件名傳 utf-8 的,就可以了,試過 WinRAR 能順利解壓。不過有個問題,如果目錄名這樣搞,似乎 WinRAR 不能解,不知道應該怎么弄。

            同時,解壓的時候由 unzGetCurrentFileInfo64 取到 unz_file_info64 后,也需要判斷一下其 flag 成員的 BIT 11 是否設上,然后根據不同的編碼解析文件名。

            剛才說的目錄名,如果那樣搞,只要解壓的時候作對,自己解自己是沒問題的,只是 WinRAR 解不了,,,待研究。

            http://zlibwrap.codeplex.com/ 上代碼已更新。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2011-11-17 01:35 | 溪流
            哦,知道了,zipOpenNewFileInZip4 的時候 FileInfo.external_fa 設上 FILE_ATTRIBUTE_DIRECTORY 表示此項是目錄。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-04 22:58 | dafan
            哥們,測試下,貌似不支持中文文件名
            無論是生成的目的文件中文還是待壓縮文件夾里包含中文。
            你也測試下吧 :)  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-04 22:59 | dafan
            包含中文文件@dafan
              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-05 21:03 | 溪流
            @dafan
            可以啊,專門為這個問題測過好多時間。請問你的用例是怎樣的?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-06 10:47 | dafan
            @溪流
            奇怪了 我這里就是不行
            我使用的是win7 英文版操作系統
            就是直接在文件夾里放一個中文文件  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-06 10:47 | dafan
            此外,把文件存儲在包含中文的路徑下也不行呢  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-06 23:25 | 溪流
            @dafan
            看看 控制面板=>區域和語言選項=>管理=>非Unicode程序的語言 那里設置成什么?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-01-07 16:07 | 溪流
            @dafan
            如果那里設置不是中文的話,請壓縮的時候選擇 utf8 文件名。
            ZipCompress 以及 ZWZipCompress 中的最后一個參數 bUtf8 設為 true 即可,如果是用 ZLibWrapText.exe 測試的,把 /utf8 設上。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2012-10-15 14:32 | loong
            實際上樓主的接口是用的minizip的接口在用

            最近想找找直接使用zlib的接口,不用minizip的接口。

            因為minizip這個庫 在他的網站上沒有找到license。怕出問題。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-10-15 14:54 | 溪流
            @loong
            沒錯。
            不過在minizip在zip.h/unzip.h中有版權說明。
            Condition of use and distribution are the same than zlib
            在contrib\minizip\MiniZip64_info.txt中也有版權說明。

            如果不用minizip的話,相當于要自己解析zip文件格式了。  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-12-25 01:20 | NuClient
            請問用winrar壓縮的zip檔案 能用minizip解開嗎  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2012-12-25 13:47 | 溪流
            @NuClient
            理論上應該可以吧,zip格式好久沒變過了吧。試一下唄  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2012-12-31 14:25 | ben
            學習了  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2013-04-06 15:49 | lycheng
            LZ 你好
            如果是使用 zip 2.0 加密的zip 文件就無法解壓,我看源代碼頁好像沒有通過調用解壓那部分函數,不知道能否看下?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2013-05-04 23:04 | 溪流
            @lycheng
            不好意思回復晚了。
            我這邊確實沒有支持加密的文件。
            不過minizip看上去是支持的,試試把unzOpenCurrentFile換成unzOpenCurrentFilePassword?  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2013-05-12 21:26 | lycheng
            @溪流

            好的,謝謝你了
              回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2013-10-29 09:00 | lbx
            博主 請問你的源碼添加crc校驗了嗎?希望能有這部分的代碼  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2014-02-22 16:32 | 依彩帆
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2014-05-16 11:10 | dd
            樓主 少了FindClose 吧  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件[未登錄] 2014-05-16 11:46 | dd
            通過LOKI_ON_BLOCK_EXIT實現了。。。@dd  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2014-11-14 15:15 | OH NO
            1>ZLibWrapLib.lib(ZLibWrapLib.obj) : error LNK2001: 無法解析的外部符號 "class ATL::CAtlStringMgr ATL::g_strmgr" (?g_strmgr@ATL@@3VCAtlStringMgr@1@A)  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2014-11-14 21:00 | 溪流
            @OH NO
            可能我們用的編譯器不一樣,下載代碼重新編譯唄  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2015-09-24 19:39 | bowman
            謝博主,項目中用了好久了  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2015-09-29 16:20 | 胡峻華
            非常具有實用性的代碼。
            感謝博主分享。
            學習了!  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2016-05-12 15:40 | shellxi
            博主,我用uncompress解壓文件的時候必須是compress自己壓縮的文件,用博主提供的api也一樣,有沒有什么方法是可以解壓比如WinRAR壓縮的zip文件的啊?一定要回答我啊!!!工作上要用弄了好久都不行!!!跪謝!  回復  更多評論
              
            # re: 使用 ZLib 壓縮/解壓 ZIP 文件 2022-11-10 15:00 | 溪流
            @shellxi
            應該能解的呀,您的文件提供給我看下?  回復  更多評論
              
            国产精品99久久久久久董美香| 一本色道久久综合狠狠躁| 久久精品国产亚洲AV不卡| 国产真实乱对白精彩久久| 久久青青草原精品影院| 久久天堂电影网| 亚洲成色999久久网站| 青青草原1769久久免费播放| 久久99国产精品久久99| 国产精品免费久久久久影院| 国产免费久久精品丫丫| 日本久久久久久久久久| 久久人妻AV中文字幕| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲香蕉网久久综合影视| 伊人久久综合成人网| 亚洲av日韩精品久久久久久a | 国内精品伊人久久久久av一坑| 久久婷婷五月综合97色一本一本| 久久精品国产亚洲AV大全| 久久亚洲国产午夜精品理论片| 99久久人人爽亚洲精品美女| 婷婷久久综合九色综合绿巨人| 久久综合九色欧美综合狠狠 | 久久久久人妻精品一区 | 色欲综合久久中文字幕网| 久久精品人人槡人妻人人玩AV | 一本色道久久综合亚洲精品| 97精品伊人久久大香线蕉app| 国产精品久久久久久久午夜片 | 国产一区二区三区久久| 国产精品美女久久久免费| 亚洲精品视频久久久| 国产精品一久久香蕉国产线看观看| 国产精品成人久久久久久久| 天堂无码久久综合东京热| 久久久久久毛片免费播放| 欧美一级久久久久久久大片| 久久99精品国产自在现线小黄鸭 | 欧美粉嫩小泬久久久久久久| 久久人爽人人爽人人片AV|