如何在 VB 中使用 Winzip 来压缩文件? 版本:VB6 / VB5 / VB4-32 现在压缩软件一大堆,但是如果您想在 VB 程式中做文件压缩的功能,您知道要怎么做吗?我不懂一些烦琐的压缩理论,但是我懂得利用现有的压缩软件来替我达到我想要的功能!在这个例子中,我要使用 Winzip 来做,所以,如果您想用下面的示例来做练习的话,先決条件就是您的电脑中一定要有安装 Winzip 才行!压缩文件 (加入文件):语法:winzip[32].exe [-min] action [options] filename[.zip] files参数说明:-min 最小化
指定 Winzip 执行时为最小化。如果您要使用 -min 这个参数,它必须是命令列参数的第一个参数。action 方法-a add 加入文件 
-f freshen 重新整理目前文件 
-u update 更新文件 
-m move 移动文件 options 选项Directories 文件夹选项 
-r Recurse Directories 含文件夹內內容。 
-p Save Extra Directory Info 储存其他的文件夹信息。 
method 決定压缩的方法选项 
-ex eXtra 最大 (最慢) 
-en Normal 一般 (默认值) 
-ef Fast 快速 
-es Super fast 最快速 
-e0 no compression 不压缩 
其他选项 
-s 设定密码 密码必须使用双引号括起来。
例如:-s "Secret Password",不过要注意大小写是不同的! 
-hs   包含符合条件的隐藏及系统文件。 filename.zip 压缩文件名
指定压缩后的文件名,要注意的是必须是全路径文件名 (含磁碟機代号及文件夹)。
files 所有原始文件
一个或多个文件,每一个文件写在獨立的一行,可以使用萬用字元,例如:*.bak。
解压缩文件:语法:winzip[32].exe -e [options] filename[.zip] directory参数说明:-e 表示解压缩
是必要的参数!options 选项-o Overwrite existing files 
without prompting 取代同名的文件。 
-j Junk pathnames 跳過舊文件。
除非指定 -J 这个参数,否則会使用原本的文件夹名稱。 
-s 设定密码 密码必须使用双引号括起来。
例如:-s "Secret Password",不过要注意大小写是不同的! 
-hs   包含符合条件的隐藏及系统文件。 filename.zip 压缩文件名
指定压缩后的文件名,要注意的是必须是全路径文件名 (含磁碟機代号及文件夹)。directory 文件夹
解压缩后的文件存放的文件夹。如果文件夹不存在便会自动建立。
注意事项:※非常重要:永远使用全路径文件名 。
※若希望执行 Winzip 时是最小化,要使用 -min 这个参数,它必须是命令列参数的第一个参数。
※Winzip 內建只支援 zip 及 unzip 二种操作模式。
※若是長文件名的话,必须使用双引号括起来。
※在设定文件时,前面及最后的字元不可空白,也不可有空白行!
※在命令列中的方法及选项参数,至少要用一个以上的空白分隔。※WinZip 可以用来配合 cc:Mail 压缩文件:
更改 WMAIL.INI 中的 [cc:Mail] section 的 compress= 这一行
指定 Winzip 的完整路径,并跟随着 "-a %1 @%2" 参数
例如:如果 Winzip 安装在 c:\winzip,則 compress= 这一行必须改成
compress=c:\winzip\winzip.exe -a %1 @%2
示例:
Private Sub Command1_Click()
Dim wzipexe As String ' winzip 执行文件的位置
Dim wsource As String ' 原始文件 (压缩前)
Dim wtarget As String ' 目地文件 (压缩后)
Dim wcmd As String ' Shell 指令
Dim retval As Double ' Shell 指令传回值' Shell 指令
wzipexe = "C:\program files\winzip\WINzip32" ' winzip 执行文件的位置
wtarget = "d:\1.zip" ' 原始文件 (压缩前)
wsource = "d:\1.mbd" ' 目地文件 (压缩后)
wcmd = wzipexe & " -a " & wtarget & " " & wsource ' Shell 指令
retval = Shell(wcmd, 6) ' Shell 指令传回值
'上面的一大串可写成
'retval = Shell("C:\program files\winzip\WINzip32 -a _
'd:\1.zip d:\1.mdb", 6)
End Sub
以上是我在CSDN上找到的一些相关介绍,但是在window运用shell有时会出错,比如当文件处于打开状态,或者文件夹下为空的时候都会报错,我曾经试着查看retval的返回值来寻找它的规律,但是好象没有什么规律啊,请各位大侠帮帮忙一起来看看吧。谢谢拉。

解决方案 »

  1.   

    是啊,如果能判断出不同的状态,我就可以根据情况做不同的处理了,现在是一旦有错的话,WINZIP也会弹出提示信息,这就太难看了。
      

  2.   


    RAR 3.00 beta 4    版权 (c) 1993-2002 为 Eugene Roshal  所有   4 Mar 2002
    共享软件版本         键入 RAR -? 可获得帮助用法:     rar <命令> -<开关 1> -<开关 N> <压缩档案文件> <文件...>
                   <@列表文件...> <释放路径\><命令>
      a             添加文件到压缩档案中
      c             添加压缩档案注释
      cf            添加文件注释
      cw            写入压缩档案注释到文件中
      d             从压缩档案中删除文件
      e             释放文件到当前目录
      f             更新压缩档案内的文件
      k             锁定压缩档案
      l[t]          列出压缩档案 [技术]
      m[f]          移动到压缩档案 [仅文件]
      p             打印文件到标准输出装置
      r             修复压缩档案
      rc            重建丢失的卷
      rr[N]         添加数据恢复记录
      rv[N]         创建恢复卷
      s[名称|-]     转换压缩档案成为自解压文件
      t             测试压缩档案内的文件
      u             更新压缩档案内的文件
      v[t]          列出压缩档案详细资料 [技术]
      x             以完整路径释放文件<开关>
      -             停止开关扫描
      ac            压缩或释放后清除「存档」属性
      ad            添加档案文件名到目标路径
      ag[格式]      使用当前日期做为压缩包名
      ao            添加带有「存档」属性的文件
      ap<路径>      设置压缩档案内部路径
      as            同步压缩档案内容
      av            设置用户身份校验 (仅用于注册版)
      av-           禁止用户身份校验检查
      c-            禁止注释显示
      cfg-          禁止读取配置设置文件
      cl            转换名称为小写字母
      cu            转换名称为大写字母
      df            生成压缩档案后删除文件
      dh            打开共享的文件
      ds            禁止固定压缩档案的名称排序
      e<属性>       设置要排除的文件属性
      ed            不添加空的目录
      en            不要放置‘档案文件末尾’块
      ep            依名称排除路径
      ep1           依名称排除主目录
      ep2           扩充为完整路径
      f             更新文件
      hp[密码]      加密文件数据和文件头
      idp           禁止百分比显示
      ieml[地址]    通过电子邮件发送档案文件
      ierr          发送全部信息至标准错误显示装置
      ilog[文件名]  记录错误信息到文件(只在注册版中可用)
      inul          禁止所有信息
      isnd          允许声音提示
      k             锁定压缩档案
      kb            继续释放损坏的文件
      m<0..5>       设置压缩等级 (0-存储...3-默认...5-最大)
      mc<参数>      设置高级压缩参数
      md<大小>      以 KB 为单位的字典大小 (64,128,256,512,1024,2048,4096 或 A-G)
      ms[ext;ext]   指定要保存的文件类型
      o+            覆盖已存在的文件
      o-            不覆盖已存在的文件
      os            保存 NTFS 数据流
      ow            保存或还原所有者组
      p[密码]       设置密码
      p-            不询问密码
      r             包含所有子目录
      r0            只包含与通配符匹配的所有子目录
      ri<P>[:<S>]   设置优先级 (0-默认,1-低..15-高) 及毫秒的睡眠停顿时间
      rr[N]         添加数据恢复记录
      rv[N]         创建恢复卷
      s[<N>,v[-],e] 创建固定压缩档案
      s-            禁止创建固定压缩档案
      sfx[名称]     创建自解压文件
      t             压缩后测试文件
      ta<日期>      处理在以 YYYYMMDDHHMMSS 格式描述的 <日期> 之后修改的文件
      tb<日期>      处理在以 YYYYMMDDHHMMSS 格式描述的 <日期> 之前修改的文件
      tk            保持原有的压缩档案时间
      tl            将压缩档案时间设为最新的时间
      tn<时间>      处理比 <时间> 新的文件
      to<时间>      处理比 <时间> 旧的文件
      u             更新文件
      v             创建分卷压缩时自动检测大小或列出所有的分卷
      v<大小>[k,b]  创建分卷压缩 大小=<大小>*1000 [*1024, *1]
      vd            创建分卷压缩前先清除磁盘内容
      ver[n]        文件版本控制
      vn            使用旧模式的卷命名方案
      vp            在每个分卷压缩前暂停
      w<路径>       指定工作目录
      x<文件>       排除指定的文件
      x@            从标准输入装置读取要排除的文件名
      x@<列表>      排除指定列表文件中的文件
      y             所有的询问都回答是
      z<文件>       从文件读取压缩档案注释
      

  3.   

    dongge2000,我是想要判断当文件处于打开状态,或者文件夹下为空时候,用WINZIP进行压缩它的出错信息是什么!
      

  4.   

    shell返回的是ProcessID,用WinExec 可以得到错误码
    Private Declare Function WinExec Lib "Kernel"(ByVal lpCmdLine As String, ByVal nCmdShow As Integer) As Integer 
    dim i as integer 
    i=winexec("notepad.exe","c:\wst.txt",9)'参数9 即SW_RESTORE,也就是激活并显示窗口你调试一下看看
    当文件处于打开状态,或者文件夹下为空时候返回的错误码是多少,然后用if判断提示
      

  5.   

    lxcc,我用了你代码可是报错啊,说winexec参数有错,你能不能把你的完整代码贴给我啊?谢谢拉
      

  6.   

    Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As LongPrivate Sub Command1_Click()
        Dim i As Integer
        i = WinExec("notepad.exe c:\wst.txt", 9) '参数9 即SW_RESTORE,也就是激活并显示窗口
        Debug.Print i
    End Sub
      

  7.   

    sorry!
    第一个写错了!参数位置不对 :$
      

  8.   

    我改过了,可以运行了,但是它的返回值怎么一直是33呢?无论这个TXT文件是否存在都是这个返回值,再扩散开的话,如果是WINZIP的话,返回值也是保持一个固定值,还是33,而且它也无法判断压缩的时候文件是打开还是不存在,还是一样会弹出WINZIP的提示框,提示用户有什么错误发生,可我就是想拦截这个报错的提示框,不想让它显示给用户看啊。怎么办呢?