VB中如何用rar算法实现压缩文件?

sunnykong 2003-02-12 10:58:25
如何在VB中调用RAR的压缩算法进行文件的压缩呢?
如果需要RAR的DLL文件去哪里下载?是用那一个方法进行压缩的?参数怎么样设置?
请高手指教~~~~~
...全文
262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsclub 2003-02-12
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/779/779685.xml?temp=.1961023
liangqiang 2003-02-12
  • 打赏
  • 举报
回复
up
vbangle 2003-02-12
  • 打赏
  • 举报
回复
恢复:

Option Explicit

Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private numFileSum As Integer
Private numMonth As Integer
Private strPath As String

Private Sub Form_Load()
On Error GoTo UnitLoadError
Dim strName As String
Dim intCount As Integer
Dim sSql As String

Open reFileName For Input As #1
intCount = 1
Do While Not EOF(1) ' 循环至文件尾。
Line Input #1, strName
Select Case intCount
Case 1
numFileSum = strName
Label5.Caption = "磁盘张数:" & strName
Case 2
Label1.Caption = strName & "年"
Case 3
Label2.Caption = strName & "月"
Case 4
Label3.Caption = strName
Case 5
Label4.Caption = strName
End Select
intCount = intCount + 1
Loop
Close #1

UnitLoadError:
Dim sTmp As String
If Err <> 0 Then
sTmp = "不期望的错误:" & vbCrLf & vbCrLf & Err.Description & vbCrLf & "错误号:" & Err
MsgBox sTmp, vbInformation, App.Title
Exit Sub
End If
End Sub

Private Sub cmdCancel_Click()
Unload Me
End Sub

Private Sub cmdOK_Click()
On Error GoTo UnitRestoreError
Const Process_Query_Information = &H400
Const Still_Active = &H103
Dim pIdRAR, hProcess, lngExitCode As Long
Dim numMsgBox, numForPoint As Integer
Dim strFileDateS, strFileDateO, strEnvPath, strTmpFile As String
Me.Hide
strEnvPath = Environ("TEMP") ' 取得环境变量。
If Right(strEnvPath, 1) <> "\" Then
strEnvPath = strEnvPath & "\"
End If
strPath = Left(reFileName, InStrRev(reFileName, "\"))
For numForPoint = 1 To numFileSum
If MsgBox("恢复第" & Str(numForPoint) & "张盘,共" & Str(numFileSum) & "张盘", vbInformation + vbOKCancel, App.Title) = vbOK Then
strTmpFile = "_ZFBCKUP.D" & IIf(numForPoint < 10, "0" & Trim(Str(numForPoint)), Str(numForPoint)) '判断当小于10时,加入0,使得扩展名为3位
frmDateLoading.Show
FileCopy strPath & strTmpFile, strEnvPath & strTmpFile
Else
If Dir(strEnvPath & "_ZFBCKUP.D*") <> "" Then
Kill strEnvPath & "_ZFBCKUP.D*"
End If
Unload frmDateLoading
Unload Me
Exit Sub
End If
frmDateLoading.Hide
numForPoint = numForPoint + 1
Next numForPoint

frmDateLoading.Show

strTmpFile = "RAR E -Y -V " & strEnvPath & "_ZFBCKUP.D01 " & App.Path & "\" & Trim(Str(pCurryear))

pIdRAR = Shell(strTmpFile, vbHide)
hProcess = OpenProcess(Process_Query_Information, False, pIdRAR)
Do
GetExitCodeProcess hProcess, lngExitCode
DoEvents
Loop While lngExitCode = Still_Active

If Dir(strEnvPath & "_ZFBCKUP.D*") <> "" Then
Kill strEnvPath & "_ZFBCKUP.D*"
End If

Screen.MousePointer = vbDefault
Unload frmDateLoading
MsgBox "恭喜你,数据恢复完毕!", vbInformation, "请确定"
Unload Me

frmInfo.Show vbModal, Me

UnitRestoreError:
Dim sTmp As String
If Err <> 0 Then
frmDateLoading.Hide
sTmp = "不期望的错误:" & vbCrLf & vbCrLf & Err.Description & vbCrLf & "错误号:" & Err
If MsgBox(sTmp, vbYesNo + vbQuestion + vbDefaultButton2, App.Title) = vbYes Then
Resume
Else
Unload frmDateLoading
If Dir(strEnvPath & "SendDate.*") <> "" Then
Kill strEnvPath & "SendDate.*"
End If
Unload Me
End If
End If
End Sub
vbangle 2003-02-12
  • 打赏
  • 举报
回复
备份:

Option Explicit

Private index As Integer
Private bckupPath As String
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Sub bckupBegin_Click()
On Error GoTo hdError
Const Process_Query_Information = &H400
Const Still_Active = &H103
Dim pIdRAR, hProcess, lngExitCode As Long

Dim EnvString, tmpPathA, TmpPathB, fiName As String '' 声明变量。
Dim flNum, frI As Integer
If Dir(App.Path & "\RES\LoadWait.AVI") = "" Then
MsgBox "没有找到 LoadWait.AVI 文件 !"
Unload Me
End If

EnvString = Environ("TEMP") '' 取得环境变量。
If Right(EnvString, 1) <> "\" Then
EnvString = EnvString & "\"
End If

If Dir(EnvString & "_ZFBCKUP.D*") <> "" Then
Kill EnvString & "_ZFBCKUP.D*"
End If

tmpPathA = "RAR A -S -K -EP -V1435K " & EnvString & "_ZFBCKUP.D01 " & App.Path & "\" & Trim(Str(pCurryear)) & "\UDate.mdb"
pIdRAR = Shell(tmpPathA, vbHide)
hProcess = OpenProcess(Process_Query_Information, False, pIdRAR)
Me.Hide
frmDateLoading.Show
Do
GetExitCodeProcess hProcess, lngExitCode
DoEvents
Loop While lngExitCode = Still_Active

File1.Path = EnvString
File1.Pattern = "_ZFBCKUP.D??"
flNum = File1.ListCount
If flNum = 0 Then
MsgBox "对不起,备份出错,请检查!", vbExclamation, "错误"
Exit Sub
End If

For frI = 1 To flNum
frmDateLoading.Hide
If MsgBox("复制第" & Str(frI) & "张盘,共" & Str(flNum) & "张盘", vbOKOnly + vbInformation, "提示") = vbOK Then
frmDateLoading.Show
frmDateLoading.Refresh
TmpPathB = "_ZFBCKUP.D" & IIf(frI < 10, "0" & Trim(Str(frI)), Trim(Str(frI)))
If Dir(bckupPath & "NUL") <> "" Then
If frI = 1 Then
Open bckupPath & "_ZFBCKUP.LOG" For Output As #1
Print #1, flNum
Print #1, "备份年份:" & Trim(Str(pCurryear))
Print #1, "备份月份:" & Trim(Str(iMonther))
Print #1, "单位编号:" & pDwid
Print #1, "单位名称:" & pDwmc
Close #1
End If
FileCopy EnvString & TmpPathB, bckupPath & TmpPathB
End If
End If
Next frI
If Dir(EnvString & "_ZFBCKUP.D*") <> "" Then
Kill EnvString & "_ZFBCKUP.D*"
End If
Screen.MousePointer = vbDefault
Unload frmDateLoading
MsgBox "恭喜你,数据备份完毕!", vbInformation, "请确定"
Unload Me
Exit Sub
hdError:
Dim sTmp As String
If Err <> 0 Then
frmDateLoading.Hide
sTmp = "不期望的错误:" & vbCrLf & vbCrLf & Err.Description & vbCrLf & "错误号:" & Err
If MsgBox(sTmp, vbYesNo + vbQuestion + vbDefaultButton2, App.Title) = vbYes Then
Resume
Else
Unload frmDateLoading
If Dir(EnvString & "SendDate.*") <> "" Then
Kill EnvString & "SendDate.*"
End If
Exit Sub
End If
End If
End Sub

Private Sub dir1_change()
bckupPath = Dir1.Path
If Right(Dir1.Path, 1) <> "\" Then
bckupPath = Dir1.Path & "\"
End If
End Sub

Private Sub Drive1_Change()
On Error GoTo hdError
Dir1.Path = Left(Drive1.Drive, 2) & "\"
Exit Sub
hdError:
Dim sTmp As String
If Err <> 0 Then
sTmp = "不期望的错误:" & vbCrLf & vbCrLf & Err.Description & vbCrLf & "错误号:" & Err
MsgBox sTmp, vbInformation, App.Title
Resume
End If
End Sub

Private Sub Combo1_Click()
Dim erh As Integer, label As String, tmp As String
On Error GoTo errorh
ChDrive Left(Combo1.Text, InStr(Combo1.Text, ":")) ''改变当前驱动器
label = Dir("\*.*", 8) ''获取当前磁盘卷标
''显示格式处理
If Len(label) = 0 Then
tmp = Combo1.List(Combo1.ListIndex)
Combo1.List(Combo1.ListIndex) = Left(Left(tmp, 2) & " [None] ", 12) & "盘"
Else
tmp = Combo1.List(Combo1.ListIndex)
Combo1.List(Combo1.ListIndex) = Left(tmp, 3) & "[" & Left(label, 11) & "] " & " 盘"
End If
Dir1.Path = CurDir ''获取当前目录
Dir1.Refresh: File1.Refresh ''更新目录列表框和文件列表框
''此两句非常关键,不可缺省
''否则目录列表框不会变动
Exit Sub
''出错处理
errorh:
''显示惊叹号图标和 RETRY ,CANCLE按钮
erh = MsgBox(" " & Error(Err), 48 Or 5, "错误")
If erh = 2 Then ''按下CANCLE按钮
Combo1.ListIndex = index
Resume Next
Else
Resume
End If
Exit Sub
End Sub

Private Sub Combo1_DropDown()
index = Combo1.ListIndex '' 记录当前选项下标
End Sub

''将驱动器更表框中的内容加入到组合框中
Private Sub Form_Load()
Dim i As Integer, tmp As String
For i = 0 To Drive1.ListCount - 1
If Len(Drive1.List(i)) = 2 Then
tmp = Left(Drive1.List(i) & " [None] ", 12) & "盘"
End If
If InStr(Drive1.List(i), "]") Then
If InStr(Drive1.List(i), "]") > 11 Then
tmp = Left(Drive1.List(i), 11) & "...] " & "盘"
Else
tmp = Left(Drive1.List(i) & " ", 12) & "盘"
End If
End If
Combo1.AddItem tmp
Next
Combo1.ListIndex = Drive1.ListIndex ''设置当前驱动器
End Sub

龙华 2003-02-12
  • 打赏
  • 举报
回复
-a 压缩
-r 包含路径
-x 解压缩
-sfx 生成exe文件。
sunnykong 2003-02-12
  • 打赏
  • 举报
回复
有没有高手有源码呀?????
RAR 是一个让你在命令行模式管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使创建压缩文件时指定了 .zip 扩展名,它仍然是 RAR 格式的。Windows 用户 可以 WinRAR,它支持更多的压缩文件类型,包括 RAR 和 ZIP 格式。 WinRAR 提供了图形用户界面和命令行模式。虽然控制台 RAR 和图形界面 WinRAR 有相似的命令行语法,但是它们还有有一些不同。所以推荐使用此 rar.txt 手册用于 控制台 RAR(rar.exe 在 Windows 版本的情况下),winrar.chm 是图形界面 WinRAR (winrar.exe) 的帮助文件。 配置文件 ~~~~~~~~ Unix 版本的 RAR 从用户的 home 或 /etc 目录的 .rarrc 文件读取配置文件信息 (存储在 HOME 环境变量) Windows 的版本 RARrar.ini 文件读取配置文件信息,它放在 rar.exe 文件相 同的目录。 这个文件包含下列字符串: switches=任何 RAR 开关,用空格分开 例如: switches=-m5 -s 环境变量 ~~~~~~~~ 可以通过建立"RAR"环境变量来添加默认参数到命令行. 例如,在 Unix ,下列命令行可以被添加到你的配置: RAR='-s -md1024' export RAR RAR 将使用这个字符串作为命令行的默认参数,并将使用 1024KB 字典大小来创建 “固实”压缩文件RAR 控制选项使用下列优先级: 命名行开关 最高优先级 在 RAR 变量的开关 低优先级 保存在配置文件的开关 最低优先级 日志文件 ~~~~~~~~ 如果在命令行或配置文件指定开关 -ilog ,RAR 将会把处理压缩文件遇到的错误 等写到日志文件。读取开关 -ilog 描述获得更多信息。 固实压缩的文件列表 - rarfiles.lst ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rarfiles.lst 包含一个用户定义的文件列表,告诉 RAR 添加文件到固实压缩文件时的顺 序。它可以包含文件名通配符和指定项目 -$default。默认项目定义了这个文件与 其他项目不相符时的顺序清单位置。 注释字符是 ';'. 在 Windows ,这个文件应该放在 RAR 所在的或 %APPDATA%\WinRAR 目录, 在 Unix - 放在用户的 home 目录或在 /etc 。 提高压缩率和操作速度的提示: - 在压缩文件,小文件应该被组织在一起; - 频繁被处理的文件应该放在开始的位置。 普通的掩码越靠近顶端优先权就越高,但是这个规则存在例外。如果 rarfiles.lst 包含两个掩码,并且所有文件既匹配第一个掩码,也匹配第二个掩码, 较小的子集 或者更精确的匹配拥有更高的优先权。例如,如果你用 *.cpp 和 f*.cpp 掩码, f*.cpp 拥有更高的优先权。 RAR 命令行语法 ~~~~~~~~~~~~~~ 语法 RAR [ - ] [ ] [ ] [ ] 描述 命令行选项 (命令和开关) 提供了使用 RAR 创建和管理压缩文件的控制方法。命 令是一个字符串(或单个的字母),命令 RAR 去执行一个相应的操作。开关被用来 改变 RAR 执行操作的方法。其它参数是压缩文件名和被压缩的文件或要从压缩文件 被解压文件。 列表文件是一个包括处理的文件名的纯文本文件。第一列应该以文件名开始。可以 在//字符后添加注释。例如,你可以创建包含下列字符串的 backup.lst: c:\work\doc\*.txt //备份文本文档 c:\work\image\*.bmp //备份图片 c:\
用户手册 ~~~~~~~~ RAR 3.30 32 位控制台版本 ~~~~~~~~~~~~~~~~~~~~~~~~ =-=-=-=-=-=-=-=-=-=-=-=-=-=- 欢迎使用 RAR 压缩文件管理器! -=-=-=-=-=-=-=-=-=-=-=-=-=-= 简介 ~~~~ RAR 是一个强力压缩工具,允许你管理和管理压缩文件。控制台 RAR 只支持 RAR 格式,带有的 ".rar" 扩展名的文件。ZIP 和其他格式不被支持。Windows 用户可以 安装图形界面 RAR 版本 - WinRAR,它可以处理更多的压缩文件类型。 RAR 的功能包括: * 高度成熟的原创压缩算法 * 对于文本、声音、图像和 32 位和 64 位 Intel 可执行程序压缩的特殊优化算法 * 获得比类似工具更好的压缩率,使用'固实'压缩 * 身份校验(只有注册版本可用) * 自解压压缩文件和分卷压缩(SFX) * 对物理损伤的压缩文件的恢复能力 * 锁定,密码,文件顺序列表,文件安全和更多…… 配置文件 ~~~~~~~~ Unix 版本的 RAR 从用户的 home 或 /etc 目录的 .rarrc 文件读取配置文件信息 (存储在 HOME 环境变量) Windows 的版本 RARrar.ini 文件读取配置文件信息,它放在 rar.exe 文件相 同的目录。 这个文件包含下列字符串: 开关= 环境变量 ~~~~~~~~ 可以通过建立"RAR"环境变量来添加默认参数到命令行. 例如,在 UNIX ,下列命令行可以被添加到你的配置: RAR='-s -md1024' export RAR RAR 将使用这个字符串作为命令行的默认参数,并将使用 1024KB 字典大小来创建 “固实”压缩文件RAR 控制选项使用下列优先级: 命名行开关 最高优先级 在 RAR 变量的开关 低优先级 保存在配置文件的开关 最低优先级 日志文件 ~~~~~~~~ 如果在命令行或配置文件指定开关 -ilog ,RAR 将会把处理压缩文件遇到的错误 等写到日志文件。在 Unix ,这个文件名为 .rarlong,放在用户的 home 目录。 在 Windows ,它名为 rar.log,放在 rar.exe 文件相同的目录。开关 -ilog 允 许改变默认的日志名。 固实压缩的文件列表 - rarfiles.lst ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rarfiles.lst 包含用户定义的文件列表,告诉RAR添加文件到固实压缩文件时的顺序。 它可以包含文件名通配符和指定项目-$default。默认项目定义了这个文件与其他 项目不相符时的顺序清单位置。 注释字符是 ';'. 在 Windows ,这个文件应该放在RAR所在的目录。 在 Unix - 放在用户的 home 目录或 /etc。 提高压缩率和操作速度的提示: - 在压缩文件,小文件应该被组织在一起; - 频繁被处理的文件应该放在开始的位置。 普通的掩码越靠近顶端优先权就越高,但是这个规则存在例外。如果 rarfiles.lst 包含两个掩码,并且所有文件及匹配第一个掩码,也匹配第二个掩码, 第一个掩码 将拥有更高的优先权,即使它被放到第二个后面。例如,存在*.cpp 和 f*.cpp 掩码 的情况下,f*.cpp 拥有更高的优先权。 RAR 命令行语法 ~~~~~~~~~

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧