在VB中如何调用压缩工具winrar

本人用VB写了一个自动备份工具,现在想在备份之后自动调用winrar进行压缩,即在目标文件夹看到的是压缩过的文件.本人不知如何调用winrar,向大家请教如何才能实现.最好有VB语句.谢谢!!!

答案1
给Access数据库压缩

给你一段别人写的sub做参考,压缩采用dao方法

Option Explicit

' 压缩 Access 数据库
Public Sub CompactJetDatabase(SourceFile As String, Optional Password As String, Optional BackupOriginal As Boolean = True)
On Error GoTo CompactErr

Dim strBackupFile As String
Dim strTempFile As String

' 判断来源文件是否存在
If Dir(SourceFile) <> "" Then
' 如果需要备份原文件
If BackupOriginal = True Then
strBackupFile = GetSourceFilePath(SourceFile) & "Backup.mdb"
If Dir(strBackupFile) <> "" Then
Kill strBackupFile
End If

FileCopy SourceFile, strBackupFile
End If

' 建立压缩文件名
strTempFile = GetSourceFilePath(SourceFile) & "Temp.mdb"
If Dir(strTempFile) <> "" Then
Kill strTempFile
End If

' 通过 DBEngine 压缩文件,注意,您必须引用 Microsoft DAO 3.xx Object Library
DBEngine.CompactDatabase SourceFile, strTempFile, , , ";Pwd=" & Password & ";"
' 删除旧文件
Kill SourceFile

' 重新命名新文件名
Name strTempFile As SourceFile
Else
MsgBox SourceFile & " 文件找不到!", vbExclamation
End If

CompactErr:
If Err.Number <> 0 Then
MsgBox "压缩数据库发生错误:" & vbCrLf & Err.Description & Err.Number, vbCritical, "错误"
End If

On Error GoTo 0
Exit Sub
End Sub


答案2
一、Shell函数
  Shell函数是VB中的内部函数,它负责执行一个可执行文件,返回一个Variant(Double),如果成功的话,代表这个程序的进程ID,若不成功,则会返回0。

  Shell的语法:Shell(PathName[,WindowStyle])。

  PathName 为必需参数。类型为String,它指出了要执行的程序名,以及任何需要的参数或命令行变量,也可以包括路径名。

  WindowStyle为可选参数。Integer类型,指定在程序运行时窗口的样式。WindowStyle有以下这些值。

  常量 值 描述
  VbHide 0 窗口被隐藏,且焦点会移到隐式窗口。
  VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。
  VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示(缺省值)。
  VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。
  VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
  VbMinimizedNoFocus 6 窗口会以一个图标来显示,而当前活动的窗口仍然保持活动。

  二、关于WinRar的用法
  主要介绍以下如何在WinRar中用命令行来压缩和解压缩文件。

  压缩:WINRAR A [-switches] [Files] [@File lists]

  例如你想把try.mdb压缩到C盘下,可以WINRAR A C:try.rar C:try.mdb

  解压缩:如果带目录解压缩

     WINRAR X [-switches] [Files] [@File lists] [destionation folder]

     如果在当前目录解压缩,即解压缩时不写目录名

     WINRAR E [-switches] [Files] [@File lists] [destionation folder]

  例如你想把try.rar解压缩到C盘下,可以WINRAR X C:try.rar C:try.mdb

  三、一个例子
  在VB中新建一个工程,在Form1中添加两个按钮Command1、Command2和Command3,把他们的Caption属性分别设为"压缩文件"、"解压缩文件"和"传递文件"。按Command1时把文件try.mdb压缩成try.rar。
Private Sub Command1_Click()

  Dim Rarexe As String ‘WINRAR执行文件的位置

  Dim Source As String ‘ 压缩前的原始文件

  Dim Target As String ‘ 压缩后的目标文件

  Dim FileString as String ‘Shell指令中的字符串

  Dim Result As Long

   Rarexe="C:program fileswinrarwinrar"

  Source="C:try.mdb"

  Target="C:try.rar"

  FileString = rarexe & " a " & Target & " " & Source

  Result = Shell(FileString, vbHide)

  End Sub

  解压的过程类似,按Command2可以把try.rar解压生成 try.mdb。在执行了上面的压缩过程后,可以删除文件try.mdb,来解压缩重新生成try.mdb。

  Private Sub Command2_Click()

  Dim Rarexe As String ‘WINRAR执行文件的位置

  Dim Source As String ‘ 解压缩前的原始文件

  Dim Target As String ‘ 解压缩后的目标文件

  Dim FileString as String ‘Shell指令中的字符串

  Dim Result As Long

   Rarexe="C:program fileswinrarwinrar"

  Source="C:try.rar"

  Target="C:try.mdb"

  FileString = rarexe & " X " & Source & " " & Target

  Result = Shell(FileString, vbHide)

  End Sub

  文件从一台计算机传输到另一台计算机前,应知道另一台计算机的名字,然后用FileCopy语句就可以了。假设要把压缩后try.rar传递到计算机名为"other"的共享目录"want"下。

  Private Sub Command3_Click()

  Dim SourceFile, DestinationFile

   SourceFile ="C:try.rar " ‘ 指定源文件名。

   DestinationFile = "otherwanttry.rar" ‘ 指定目的文件名。

   FileCopy SourceFile, DestinationFile ‘ 将源文件的内容复制到目的文件中。

  End Sub

参考 http://www.enet.com.cn/article/2004/0319/A20040319295919.shtml


答案3
非常感谢上面的两位!!!
现在备份的文件不止一个,而且不断有新文件生成,如果自动备份filecopy函数不修改文件的创建和修改时间,压缩后的文件创建时间和修改时间与以前不一样了,如何才能将已经备份压缩过的文件不在进行备份压缩呢?

答案4
//现在备份的文件不止一个,而且不断有新文件生成,如果自动备份filecopy函数不修改文件的创建和修改时间,压缩后的文件创建时间和修改时间与以前不一样了,如何才能将已经备份压缩过的文件不在进行备份压缩呢?

用GetFileTime函数获得文件时间(必要的话SetFileTime修改文件时间):

GetFileTime
【VB声明】
Private Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

【说明】
取得指定文件的时间信息

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError

【备注】
如果不需要特定的信息,那么lpCreationTime,lpLastAccessTime,lpLastWriteTime都可以设置为零(用ByVal
As Long)。这个函数返回的文件时间采用UTC格式

【参数表】
hFile ---------- Long,文件的句柄

lpCreationTime - FILETIME,用于装载文件的创建时间

lpLastAccessTime - FILETIME,用于装载文件上一次访问的时间(FAT文件系统不支持这一特性)

lpLastWriteTime - FILETIME,用于装载文件上一次修改的时间

SetFileTime:
【VB声明】
Private Declare Function SetFileTime Lib "kernel32" Alias "SetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

【说明】
设置文件的创建、访问及上次修改时间

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError

【参数表】
hFile ---------- Long,系统文件句柄

lpCreationTime - FILETIME,文件的创建时间

lpLastAccessTime - FILETIME,文件上一次访问的时间

lpLastWriteTime - FILETIME,文件最近一次修改的时间



答案5
非常感谢rainstormmaster(暴风雨 v2.0)!希望能请教到更多高手!!!

答案6
进来学习一下!!!

答案7
http://blog.csdn.net/northwolves/archive/2005/09/25/489106.aspx

答案8
各位高手:能否将压缩后的文件的创建时间和修改时间设置为源文件的创建时间和修改时间,这样自动备份时,已经备份过的文件就不用再备份了,只需备份新生成的文件,vb中的filecopy就好用了!恭请你们的指点!!!

答案9
路过学习

答案10
感谢各位!!! 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值