VB解压缩带密码RAR文件的两者方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB解压缩带密码RAR文件的两者方法
在一些批处理任务的应用程序如安装程序中,需要对压缩文件进行解压缩处理。
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\CurrentV ersion\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
其他代码由于篇幅的关系,不在这里列出来。
请到笔者个人主页原创作品栏目中下载源代码。
二、采用Unrar.dll(或者Unrar.ocx控件)进行解压缩
将Unrar.dll控件复制到工程目录或者Windows\System32下,并在工程目录下,新建一个批处理文件,输入regsvr32.exe /s UnRar.dll指令后存盘。
运行该批处理指令,对其进行注册。
注意为了保证程序的正常运行,需要要获得最新版本的UnRar.dll文件。
读者可以去RAR实验室下载,地址是:/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框架下,实现本地操作服务器在线解压缩文件的功能。
读者可以尝试一下。