在一些批处理任务的应用程序如安装程序中,需要对压缩文件进行解压缩处理。VB来实现对压缩文件格式,如RAR、Zip等文件的解压缩,总的来说,有以下两种方法: 一、 采用winrar命令行 一般来说,安装好winrar后,在安装目录中,有个名为rar.txt的文件。其实该文件就是Winrar的控制台(命令行)中文手册。下面我们一起来学习一下,和解压缩文件有关的命令行。 Winrar命令行的通用格式是: RAR <命令> [ -<开关> ] <压缩文件> [ <@列表文件...> ] [ <文件...> ] [ <解压路径\> ] 举例来说 ,<命令>为a时 ,表示添加文件到压缩文件中,其中需压缩的文件由列表文件指定。当<命令>为e的时候,就表示解压文件到当前目录。如果需要将压缩文件解压缩到自定义目录,则通常使用x命令,该命令表示带绝对路径进行解压缩。 -<开关>为-y,表示对于所有询问全部回答是。如果rar文件包含密码,则需要添加开关为"-p密码字符串",否则不能正常解压缩。 如果要判断是否winrar命令行是否执行成功,可以通过该命令行的返回值来判断。如果返回值为0,则成功执行。如果不为0,则执行过程中出现错误。错误代码rar.txt中有详细定义。请仔细研读该文件。 在有了上述理论作为基础之后,接下来,我们用VB来实现创建和解压缩一个带密码的压缩文件。 打开VB6,新建一个标准的Exe工程文件,界面设计如下图所示,控件的名称采用默认的名称。 图 解压缩界面 程序首先要获得Winrar的安装路径,一般来说,安装好了Winrar后,会在注册表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\创建一个winrar.exe的路径,该路径下有一个名为Path的字符串项,该项的值保存的就是Winrar的安装路径。本例中,引用Registry Access Functions对象来实现对注册表的操作。 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 其他代码由于篇幅的关系,不在这里列出来。请到笔者个人主页http://www.原创作品栏目中下载源代码。 二、 采用Unrar.dll(或者Unrar.ocx控件)进行解压缩 将Unrar.dll控件复制到工程目录或者Windows\System32下,并在工程目录下,新建一个批处理文件,输入regsvr32.exe /s UnRar.dll指令后存盘。运行该批处理指令,对其进行注册。注意为了保证程序的正常运行,需要要获得最新版本的UnRar.dll文件。读者可以去RAR实验室下载,地址是:http://www./rar_add.htm。 下面介绍一下Unrar.dll在VB中的使用方法。 新建一个标准exe文件工程,将Unrar.ocx控件添加到工程中,界面和上一个例子相同。 添加以下API函数声明到窗体的通用声明部分: Public Declare Function RAROpenArchive Lib "unrar.dll" (ByRef ArchiveData As RAROpenArchiveData) As Long 类似地,同时需要声明的还有:RARCloseArchive、RARReadHeader、RARProcessFile、RARSetChangeVolProc和RARSetPassword函数。可以说,程序解压缩的核心技术就是这几个函数实现的。 使用Unrar.dll进行解压缩的流程和核心代码如下: ''打开压缩文件(OpenArchive)主要利用RAROpenArchive函数实现,该函数返回rar文件数据的句柄。 LHANDLE = RAROpenArchive(uRAR) '如果有rar文件有密码,则需执行以下代码: If PassWord <> "" Then RARSetPassword LHANDLE, PassWord '接下来读取rar文件头,将返回值存放到变量p_Status中. p_Status= RARReadHeader(LHANDLE, uHeader) '解压缩文件到指定的路径,注意当第三个参数指定解压路径的时候,第四个参数必须为为空字符串,否则,测试不通过 Ret = RARProcessFile(LHANDLE, RAR_EXTRACT, destpath, "") '继续读取rar文件,将返回值存放到变量p_Status中. p_Status= RARReadHeader(LHANDLE, uHeader) 返回上一步,继续解压缩文件,并判断p_Status是否为非0的值,当解压缩完成时候,,p_Status为非0,则退出循环。 分析以上的代码,在VB中实现对RAR文件的解压缩控制其实并不太难,尤其值得说明的是,第二种方法,可以将其应用在.net框架下,实现本地操作服务器在线解压缩文件的功能。读者可以尝试一下。
|