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

原创 2007年09月12日 20:21:00
本人用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
感谢各位!!! 

VB 利用WINRAR 压缩文件及解压

预备知识:1. Shell 函数执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。语法Shell(pathname[,wi...
  • northwolves
  • northwolves
  • 2005年09月25日 09:17
  • 8179

Java使用winrar解压缩

JAVA JDK中的解压缩似乎不能解压缩我们手工压缩的RAR文件,只能解压JDK中的API压缩的RAR所以想出以下用WINRAR命令行方式的解压缩package edu.nwpu.vcampus.ut...
  • frjcy
  • frjcy
  • 2010年02月05日 18:11
  • 1735

VC++调用winrar

1.首先判断是否安装winrar,读注册表 #include #include //有的主机上的注册表键值不全,必须进行对多个键的分析 char* value1="InstallLocatio...
  • QQ575787460
  • QQ575787460
  • 2012年11月18日 15:20
  • 3191

教你在DOS(cmd)下使用WinRAR压缩文件

著名的winrar压缩软件在DOS下也能使用,在winrar目录中有一个rar的可执行文件能帮  助我们来完成DOS下的压缩。 具体的用法:  rar  - -                    ...
  • leelong80
  • leelong80
  • 2008年12月08日 22:12
  • 11181

c# 调用 WinRAR 实现文件压缩、文件解压,WinRAR命令行参数,不弹窗

//压缩程序安装路径 string pathExe = Application.StartupPath + @"\WinRAR.exe"; Proces...
  • dhfekl
  • dhfekl
  • 2013年10月22日 14:29
  • 2218

VB不同模块过程的调用、菜单的编辑

标准模块是多个窗体中的公共代码部分,只能存放通用过程,一个应用程序可以有多个标准模块使用Dim或Static声明的变量称为局部变量,这种变量只在所定义的过程中有效,不同的过程中局部变量可以同名,因为他...
  • xudepeng0813
  • xudepeng0813
  • 2010年12月14日 20:53
  • 1810

【PowerShell 一天一练】 3. 调用winrar解压

  如果你安装了winrar且安装在对应下面的路径,可以尝试一下下面的代码(事实上我也是copy并修改自网上的代码)$unrar = “c:/Program files/winrar/unrar.ex...
  • zhourongbiao
  • zhourongbiao
  • 2008年09月28日 22:15
  • 1773

VB2005中调用其他控件的某个事件

一.普通方法    在程序中若为A控件的某个事件编写了程序,但又需要在B控件的某个事件被触发的情况下运行A控件的程序,可以用下列代码:    Me.btnA_click(nothing,nothing...
  • tzds7
  • tzds7
  • 2007年08月05日 13:06
  • 1224

在VB6里怎样调用VBA里的函数?

比如在Excel的VB编辑器里自己写了一个函数叫“somefunc”,然后我想在一个VB的程序里定义一个Excel.Application对象打开那个Excel文件,然后调用somefunc函数。如何...
  • zhu2695
  • zhu2695
  • 2013年11月26日 23:30
  • 1743

VB调用Matlab实例

先用VB6.0简单的勾勒一个界面:
  • woqin1990
  • woqin1990
  • 2014年08月05日 21:59
  • 2359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VB中如何调用压缩工具winrar
举报原因:
原因补充:

(最多只允许输入30个字)