最近想使用7zip壓縮,就研究了下7zip的sdk,將過程留下,分享與大家。這是本篇系列的第一篇,主要內容就是編譯。
嚴格來說,7zip這個詞是有問題的,因為官方使用了不同的詞來表達恰當的含義,如下圖所示:
因為這次研究的主要目的就是在c++中解壓縮7z格式檔案,為了方便下文就稱為7zip。
目前版本:9.20 (2010-11-18 更新)
檔名:lzma918.tar.bz2
大小:500kb
7zip中提供了多種語言支援, 平常使用多的是c的源**和c++版本編譯後基於com的7z.dll.這個dll檔案並不是直接編譯出來的,而是sdk中某個編譯後的dll檔案改名而來。sdk中檔案說明在lzma.txt中,大家可以閱讀一下加深了解。
c++相關的檔案都在cpp目錄中,編譯相關的檔案位置如下:
7zipsdk\cpp\7zip\bundles\
幾個目錄功能如下:
alone7z
編譯後是7z.exe, 只支援7z/lzma/bcj/bcj2演算法
format7zextractr
編譯後是7zxr.dll, 提供7z/lzma/bcj/bcj2的解壓縮
format7zr
編譯後是7zr.dll, 提供7z/lzma/bcj/bcj2的壓縮和解壓縮
lzmacon
編譯後是lzma.exe, 只提供lzma的壓縮和解壓縮
幾個目錄下模組編譯過程差不多,這裡以編譯7zxr.dll為例。7zip sdk中cpp模組並沒有提供vs對應的vcproj或者sln檔案,而是使用的make檔案,因此需要在命令列下使用nmake來編譯。
在不同版本的vs中,提供了不同版本的nmake檔案,因此編譯前需要呼叫對應的vs引數設定命令來設定,以裝在c盤program files下的vs2005為例:
執行:
"c:\program files\microsoft visual studio 8\common7\tools\vsvars32.bat"然後進入對應的7zipcpp模組目錄中,執行nmake指令:
編譯後的檔案在o目錄中,檔名為7zxr.dll
C 命令列解壓7z檔案
最近專案維護過程中需要解壓7z檔案。大家可以通過去了解這個犇b的壓縮解壓工具。在windwos系統的cmd裡頭,可以檢視7z.exe的命令列引數。如下圖所示 用c 呼叫例子如下 protected void page load object sender,eventargs e 可以用捕捉事件和無限...
命令列壓縮解壓一 7z
命令列壓縮解壓一 7z 1 簡介 7z,全稱7 zip,是一款開源軟體。是目前公認的壓縮比例最大的壓縮解壓軟體。主頁 中文主頁 主要特徵 全新的lzma演算法加大了7z格式的壓縮比 支援格式 壓縮 解壓縮 7z,xz,bzip2,gzip,tar,zip 僅解壓縮 arj,cab,chm,cpio,...
7z命令列引數中的路徑
最近在自動化的過程中用到了7z命令列工具,發現其引數中的路徑挺有意思的,在此總結一下。本文中所有demo使用的7z版本為 15.14 x64。下面的命令會把g temp 目錄和目錄下的所有檔案打包到壓縮檔案abc.zip中。7z.exe a abc.zip g temp 注意,此時壓縮包中是包含te...