BCB 處理 7z 壓縮格式

這次要把大正藏與卍續藏全部裝在一片 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 那二個參數,我實在不知道是做什麼用的,我就這樣亂試,至少暫時可以用了。 ^_^

重要度:
文章分類:
電腦標籤:

回應

您好,請問一下它的Delphi範例還有留著嗎?

最近我也正在找尋它的用法

還請版大不吝分享,感謝!

Eden 你好, 

我的範例應該是這一個

http://cc.embarcadero.com/item/23303

謝謝版大

另外,也可以考慮讓BCB直接使用pas所產生的.HPP檔案來橋接,會比較快一些些

給版大做個參考 ^ ^

謝謝, 我對此不熟, 不過有機會會來試試. :)

發表新回應

借我放一下廣告