现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

利用VC调用WinRAR解压和压缩文件

2013-12-20 13:37 工业·编程 ⁄ 共 4885字 ⁄ 字号 暂无评论

利用WinExec,CreateProcess,ShellExecute都可以调用WinRAR.exe来进行文件的压缩与解压。

首先要从注册表获取WinRAR的安装路径,参考代码.
CString GetWinRARPath() 

HKEY hKEY;   
LPCTSTR Rgspath = _T("Software\\WinRAR");   
LONG ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Rgspath, 0, KEY_READ, &hKEY);  
if(ret != ERROR_SUCCESS)   

  MessageBox(NULL, _T("获取WinRAR安装路径失败!"), _T("出错啦~!"), MB_OK); 
  RegCloseKey(hKEY);   
  return _T("");   
}   
// 读取键值内容   
DWORD type = REG_SZ;   
BYTE PathInfo[MAX_PATH];   
DWORD dwInfoSize = MAX_PATH;  
ret = RegQueryValueEx(hKEY, _T("exe32"), NULL, &type, PathInfo, &dwInfoSize);   
if(ret != ERROR_SUCCESS)   
{    
  MessageBox(NULL, _T("没有安装WinRar解压缩软件,请先安装WinRar解压缩软件"), _T("出错啦~!"), MB_OK);   
  RegCloseKey(hKEY);   
  return _T("");   

CString Path = (wchar_t*)PathInfo; 
return Path; 

获得路径后,就可以调用WinRAR.exe了,需要设置相应的压缩解压参数。

用法:  rar   <命令>   - <开关1>   - <开关 N>  <压缩文件>   <文件...>  <@列表文件...>   <解压路径\>

<命令>
    a                           添加文件到压缩文件
    c                           添加压缩文件注释
    cf                         添加文件注释
    cw                         写入压缩文件注释到文件
    d                           删除压缩文件中的文件
    e                           解压压缩文件到当前目录
    f                           刷新压缩文件中的文件
    i[参数]= <串>     在压缩文件中查找字符串
    k                           锁定压缩文件
    l[t,b]                 列出压缩文件[技术信息,简洁]
    m[f]                     移动到压缩文件[仅对文件]
    p                           打印文件到标准输出设备
    r                           修复压缩文件
    rc                         重建丢失的卷
    rn                         重命名压缩文件
    rr[N]                   添加数据恢复记录
    rv[N]                   创建恢复卷
    s[名字|-]           转换压缩文件为自解压格式或转换回压缩文件
    t                           测试压缩文件
    u                           更新压缩文件中的文件
    v[t,b]                 详细列出压缩文件[技术信息,简洁]
    x                           用绝对路径解压文件

<开关>
    -                           停止扫描
    ac                         压缩或解压后清除文件属性
    ad                         添加压缩文件名到目标路径
    ag[格式]             使用当前日期生成压缩文件名
    ao                         添加具有压缩属性的文件
    ap <格式>             添加路径到压缩文件中
    as                         同步压缩文件内容
    av                         添加用户身份校验(仅注册版本可用)
    av-                       禁用用户身份校验
    c-                         禁用注释显示
    cfg-                     禁用读取配置
    cl                         名称转换为小写
    cu                         名称转换为大写
    df                         压缩后删除文件
    dh                         打开共享文件
    ds                         对固实压缩文件禁用名称排序
    e <属性>               设置文件排除属性
    ed                         不添加空目录
    en                         不添加 "压缩文件结束 "标志
    ep                         从名称中排除路径
    ep1                       从名称中排除基本目录
    ep2                       展开为完整路径
    ep3                       扩展路径为包含盘符的完全路径
    f                           刷新文件
    hp[密码]             同时加密文件数据和文件头
    idp                       禁用百分比显示
    ieml[属性]         用   E-mail   发送压缩文件
    ierr                     发送所有消息到标准错误设备
    ilog[名称]         把错误写到日志文件(只有注册版本可用)
    inul                     禁用所有消息
    ioff                     完成一个操作后关闭   PC   电源
    isnd                     启用声音
    k                           锁定压缩文件
    kb                         保留损坏的已解压文件
    m <0..5>               设置压缩级别(0-存储...3-默认...5-最大)
    mc <参数>             设置高级压缩参数
    md <大小>             以KB为单位的字典大小(64,128,256,512,1024,2048,4096   or   A-G)
    ms[ext;ext]       指定存储的文件类型
    o+                         覆盖已存在文件
    o-                         不覆盖已存在文件
    oc                         设置   NTFS   压缩属性
    os                         保存   NTFS   流
    ow                         保存或恢复文件所有者和组
    p[密码]               设置密码
    p-                         不询问密码
    r                           递归子目录
    r0                         仅递归通配符名称的子目录
    rr[N]                   添加数据恢复记录
    rv[N]                   创建恢复卷
    s[ <N> ,v[-],e]   创建固实压缩文件
    s-                         禁用固实压缩文件
    sfx[名称]           创建自解压压缩文件
    st[名称]             从标准输入设备读取数据(stdin)
    t                           压缩后测试文件
    ta <日期>             添加日期   <日期>   后修改的文件,日期格式   YYYYMMDDHHMMSS
    tb <日期>             添加日期   <日期>   前修改的文件,日期格式   YYYYMMDDHHMMSS
    tk                         保留原始压缩文件时间
    tl                         设置压缩文件时间为最新文件时间
    tn <时间>             添加   <时间>   以后的文件
    to <时间>             添加   <时间>   以前的文件
    ts <m,c,a> [N]     保存或恢复文件时间(修改,创建,访问)
    u                           更新文件
    v                           自动检测创建卷的大小或者列出所有的卷
    v <大小> [k,b]     创建卷大小= <大小> *1000   [*1024,   *1]
    vd                         创建容量前清除磁盘内容
    ver[n]                 文件版本控制
    vn                         使用旧风格的卷命名方案
    vp                         每卷之前暂停
    w <路径>               指定工作目录
    x <文件>               排除指定的文件
    x@                         从标准输入设备读取要排除的文件名
    x@ <列表>             排除指定列表文件中的文件
    y                           假设对全部询问都回答是
    z <文件>               从文件读取压缩文件注释

 

例子:
CString PluginName = m_name + _T(".zip"); 
CString PluginPath = m_dir + _T("\\") + PluginName; 
CString WinRARParam = _T("a -sfx -ep1 ") + PluginPath + _T(" ") + strTempDir; 
CString Commend = WinRARPath + _T(" ") + WinRARParam; 
STARTUPINFO si = {sizeof(si)}; 
PROCESS_INFORMATION pi; 
BOOL bRet = CreateProcess(NULL,Commend.GetBuffer(Commend.GetLength()),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); 
 
if (bRet) 

    if (!WaitForSingleObject(pi.hProcess,INFINITE)) 
    { 
     //做你想做的事 
     } 

给我留言

留言无头像?