這次要把大正藏與卍續藏全部裝在一片 CD 中是一個蠻大的考驗。由於考慮到某些國家與地區不像台灣有高普及率的 DVD 光碟機,所以使用一般 640 M 的 CDR 是主要的考量,為了這個目的,先前就嘗試把 Zip 的壓縮格式換成 RAR 格式,而且採用緊密壓縮,果然省下許多空間,為此還特別去找支援 RAR 解壓縮的工具,花了一些時間才順利使用。
好景不常,在努力測試下,發現估計的容量是 620M,可是壓片廠老板曾說最好保持在 600M,才能保證資料不會因為太滿而流失,所以為這個原因,同仁又去找了 7z 的壓縮程式來試。
7z 的壓縮率果然更厲害,142 冊的經文壓縮起來硬是比 RAR 少了近 50M,如此一來一片裝光碟的理想就很有可能順利實現,但新的問題就是要改寫程式,又是花了一個下午,才把 7z 的格式搞定。
過去操作 zip 是用 http://www.drehoeksw.net/EZipBuilder.html 下載的 ZipBuilder 元件。
RAR 則是在這裡下載 http://www.rarlab.com/rar_add.htm "Unrar library for C++ Builder"。
這是自己寫的範例:
#include "UnrarDll.h" RarDll *rar = new RarDll(); // 這是直接解壓縮 char *err = rar->Extract("T01.rar", "T01n0001_001.xml"); if (!err) rar->Expanded->SaveToFile("T01n0001_001.xml"); delete rar;
至於今天學的 7z,原本是在這裡 http://www.7-zip.org/zh-tw/ 下載 LZMA 開發套件,不過試了半天卻沒什麼成果。
後來找到一個 Delphi 寫的示範程式,並從中得知主要是用一個大概是日本朋友寫的 7-zip32.dll,於是我去找到這東西,並且試著用 BCB 來操作它,花了一些時間研究,最後終於成功了。
測試過程中第一個遇到的問題是原始提供的 7-zip32.lib 似乎不被接受,所以我自己再產生一個就 OK 了。
Builder5\Bin>implib 7-zip32.lib 7-zip32.dll
第二個問題是相關的說明文件都是日文,這真的讓我一個頭二個大,我還特別去把這個可以日翻中的網頁找出來 http://www.excite.co.jp/world/chinese/ ,把一些說明逐步譯成中文,雖然譯的不好,但至少可以藉著前後文猜出一些東西來。
如此學了一陣,再加上參考 Delphi 的示範程式,也寫出簡單的示範程式
#include "7-zip32.h" char a[100]; // 這個其實我不知道在做什麼? int b = 0; // 這個其實我不知道在做什麼? SevenZip(Handle, "e T01.7z T01n0001_001.xml -r -y -hide",a, b);
原本在解壓縮時一直有一個進度的視窗,看了相關的 command 也不知如何消去,後來是看了 Delphi 的示範程式,才知道有 -hide 參數可以加入,終於隱藏進度的視窗。
至 a b 那二個參數,我實在不知道是做什麼用的,我就這樣亂試,至少暫時可以用了。 ^_^
- 發表新回應
- 瀏覽次數:99489
回應
您好,請問一下它的Delphi範例還有留著嗎? 最近我也正
您好,請問一下它的Delphi範例還有留著嗎?
最近我也正在找尋它的用法
還請版大不吝分享,感謝!
7z Delphi 範例
Eden 你好,
我的範例應該是這一個
http://cc.embarcadero.com/item/23303
謝謝版大 另外,也可以考慮讓BCB直接使用pas所產生的.
謝謝版大
另外,也可以考慮讓BCB直接使用pas所產生的.HPP檔案來橋接,會比較快一些些
給版大做個參考 ^ ^
RE:讓BCB直接使用pas所產生的.HPP檔案來橋接
謝謝, 我對此不熟, 不過有機會會來試試. :)
發表新回應