分享

VB解压缩带密码RAR文件的两者方法

 cpbj836 2017-08-28

在一些批处理任务的应用程序如安装程序中,需要对压缩文件进行解压缩处理。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框架下,实现本地操作服务器在线解压缩文件的功能。读者可以尝试一下。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多