在一些批處理任務(wù)的應(yīng)用程序如安裝程序中,需要對(duì)壓縮文件進(jìn)行解壓縮處理。VB來實(shí)現(xiàn)對(duì)壓縮文件格式,如RAR、Zip等文件的解壓縮,總的來說,有以下兩種方法: 一、 采用winrar命令行 一般來說,安裝好winrar后,在安裝目錄中,有個(gè)名為rar.txt的文件。其實(shí)該文件就是Winrar的控制臺(tái)(命令行)中文手冊(cè)。下面我們一起來學(xué)習(xí)一下,和解壓縮文件有關(guān)的命令行。 Winrar命令行的通用格式是: RAR <命令> [ -<開關(guān)> ] <壓縮文件> [ <@列表文件...> ] [ <文件...> ] [ <解壓路徑\> ] 舉例來說 ,<命令>為a時(shí) ,表示添加文件到壓縮文件中,其中需壓縮的文件由列表文件指定。當(dāng)<命令>為e的時(shí)候,就表示解壓文件到當(dāng)前目錄。如果需要將壓縮文件解壓縮到自定義目錄,則通常使用x命令,該命令表示帶絕對(duì)路徑進(jìn)行解壓縮。 -<開關(guān)>為-y,表示對(duì)于所有詢問全部回答是。如果rar文件包含密碼,則需要添加開關(guān)為"-p密碼字符串",否則不能正常解壓縮。 如果要判斷是否winrar命令行是否執(zhí)行成功,可以通過該命令行的返回值來判斷。如果返回值為0,則成功執(zhí)行。如果不為0,則執(zhí)行過程中出現(xiàn)錯(cuò)誤。錯(cuò)誤代碼rar.txt中有詳細(xì)定義。請(qǐng)仔細(xì)研讀該文件。 在有了上述理論作為基礎(chǔ)之后,接下來,我們用VB來實(shí)現(xiàn)創(chuàng)建和解壓縮一個(gè)帶密碼的壓縮文件。 打開VB6,新建一個(gè)標(biāo)準(zhǔn)的Exe工程文件,界面設(shè)計(jì)如下圖所示,控件的名稱采用默認(rèn)的名稱。 圖 解壓縮界面 程序首先要獲得Winrar的安裝路徑,一般來說,安裝好了Winrar后,會(huì)在注冊(cè)表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\創(chuàng)建一個(gè)winrar.exe的路徑,該路徑下有一個(gè)名為Path的字符串項(xiàng),該項(xiàng)的值保存的就是Winrar的安裝路徑。本例中,引用Registry Access Functions對(duì)象來實(shí)現(xiàn)對(duì)注冊(cè)表的操作。 Private Function GetWINRARPath() As String '獲得Winrar安裝路徑 …… KeyFound = myReg.GetKeyValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\App Paths\winrar.EXE", "Path", GetWINRARPath) …… GetWINRARPath = GetWINRARPath & "\WINRAR.exe" End Function '壓縮文件 Private Sub Compress(ByVal TARGET As String, ByVal FilelistPath As String, ByVal Password As String) …… Shell GetWINRARPath & " a -p" & Password & " " & TARGET & " @" & FilelistPath, vbHide …… End Sub '解壓縮文件 Private Sub DeCompress(ByVal TARGET As String, ByVal Source As String, ByVal Password As String) …… Shell GetWINRARPath & " x -y -p" & Password & " " & TARGET & " " & Source, vbHide …… End Sub 其他代碼由于篇幅的關(guān)系,不在這里列出來。請(qǐng)到筆者個(gè)人主頁http://www.原創(chuàng)作品欄目中下載源代碼。 二、 采用Unrar.dll(或者Unrar.ocx控件)進(jìn)行解壓縮 將Unrar.dll控件復(fù)制到工程目錄或者Windows\System32下,并在工程目錄下,新建一個(gè)批處理文件,輸入regsvr32.exe /s UnRar.dll指令后存盤。運(yùn)行該批處理指令,對(duì)其進(jìn)行注冊(cè)。注意為了保證程序的正常運(yùn)行,需要要獲得最新版本的UnRar.dll文件。讀者可以去RAR實(shí)驗(yàn)室下載,地址是:http://www./rar_add.htm。 下面介紹一下Unrar.dll在VB中的使用方法。 新建一個(gè)標(biāo)準(zhǔn)exe文件工程,將Unrar.ocx控件添加到工程中,界面和上一個(gè)例子相同。 添加以下API函數(shù)聲明到窗體的通用聲明部分: Public Declare Function RAROpenArchive Lib "unrar.dll" (ByRef ArchiveData As RAROpenArchiveData) As Long 類似地,同時(shí)需要聲明的還有:RARCloseArchive、RARReadHeader、RARProcessFile、RARSetChangeVolProc和RARSetPassword函數(shù)??梢哉f,程序解壓縮的核心技術(shù)就是這幾個(gè)函數(shù)實(shí)現(xiàn)的。 使用Unrar.dll進(jìn)行解壓縮的流程和核心代碼如下: ''打開壓縮文件(OpenArchive)主要利用RAROpenArchive函數(shù)實(shí)現(xiàn),該函數(shù)返回rar文件數(shù)據(jù)的句柄。 LHANDLE = RAROpenArchive(uRAR) '如果有rar文件有密碼,則需執(zhí)行以下代碼: If PassWord <> "" Then RARSetPassword LHANDLE, PassWord '接下來讀取rar文件頭,將返回值存放到變量p_Status中. p_Status= RARReadHeader(LHANDLE, uHeader) '解壓縮文件到指定的路徑,注意當(dāng)?shù)谌齻€(gè)參數(shù)指定解壓路徑的時(shí)候,第四個(gè)參數(shù)必須為為空字符串,否則,測(cè)試不通過 Ret = RARProcessFile(LHANDLE, RAR_EXTRACT, destpath, "") '繼續(xù)讀取rar文件,將返回值存放到變量p_Status中. p_Status= RARReadHeader(LHANDLE, uHeader) 返回上一步,繼續(xù)解壓縮文件,并判斷p_Status是否為非0的值,當(dāng)解壓縮完成時(shí)候,,p_Status為非0,則退出循環(huán)。 分析以上的代碼,在VB中實(shí)現(xiàn)對(duì)RAR文件的解壓縮控制其實(shí)并不太難,尤其值得說明的是,第二種方法,可以將其應(yīng)用在.net框架下,實(shí)現(xiàn)本地操作服務(wù)器在線解壓縮文件的功能。讀者可以嘗試一下。
|