2024年1月8日发(作者:)
VB解压缩带密码RAR文件的两者方法
在一些批处理任务的应用程序如安装程序中,需要对压缩文件进行解压缩处理。VB来实现对压缩文件格式,如RAR、Zip等文件的解压缩,总的来说,有以下两种方法:
一、 采用winrar命令行
一般来说,安装好winrar后,在安装目录中,有个名为的文件。其实该文件就是Winrar的控制台(命令行)中文手册。下面我们一起来学习一下,和解压缩文件有关的命令行。
Winrar命令行的通用格式是:
RAR [ - ] [ ]
[ ] [ ]
举例来说 ,为a时 ,表示添加文件到压缩文件中,其中需压缩的文件由列表文件指定。当为e的时候,就表示解压文件到当前目录。如果需要将压缩文件解压缩到自定义目录,则通常使用x命令,该命令表示带绝对路径进行解压缩。 -为-y,表示对于所有询问全部回答是。如果rar文件包含密码,则需要添加开关为"-p密码字符串",否则不能正常解压缩。
如果要判断是否winrar命令行是否执行成功,可以通过该命令行的返回值来判断。如果返回值为0,则成功执行。如果不为0,则执行过程中出现错误。错误代码中有详细定义。请仔细研读该文件。
在有了上述理论作为基础之后,接下来,我们用VB来实现创建和解压缩一个带密码的压缩文件。
打开VB6,新建一个标准的Exe工程文件,界面设计如下图所示,控件的名称采用默认的名称。
图 解压缩界面
程序首先要获得Winrar的安装路径,一般来说,安装好了Winrar后,会在注册表的HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionApp Paths创建一个的路径,该路径下有一个名为Path的字符串项,该项的值保存的就是Winrar的安装路径。本例中,引用Registry Access Functions对象来实现对注册表的操作。
Private Function GetWINRARPath() As String '获得Winrar安装路径
……
KeyFound = Value(HKEY_LOCAL_MACHINE,
"SoftwareMicrosoftWindowsCurrentVersionApp
", "Path", GetWINRARPath)
……
GetWINRARPath = GetWINRARPath & ""
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
其他代码由于篇幅的关系,不在这里列出来。请到笔者个人主页原创作品栏目中下载源代码。
二、 采用(或者控件)进行解压缩
将控件复制到工程目录或者WindowsSystem32下,并在工程目录下,新建一个批处理文件,输入 /s
指令后存盘。运行该批处理指令,对其进行注册。
注意为了保证程序的正常运行,需要要获得最新版本的文件。读者可以去RAR实验室下载,地址是:/rar_。
下面介绍一下在VB中的使用方法。
新建一个标准exe文件工程,将控件添加到工程中,界面和上一个例子相同。
添加以下API函数声明到窗体的通用声明部分:
Public Declare Function RAROpenArchive Lib ""
(ByRef ArchiveData As RAROpenArchiveData) As Long
类似地,同时需要声明的还有:RARCloseArchive、RARReadHeader、RARProcessFile、RARSetChangeVolProc和RARSetPassword函数。可以说,程序解压缩的核心技术就是这几个函数实现的。
使用进行解压缩的流程和核心代码如下:
''打开压缩文件(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框架下,实现本地操作服务器在线解压缩文件的功能。读者可以尝试一下。


发布评论