现在的位置: 首页 > 综合 > 正文

C# rar压缩 解压缩 文件

2012年02月11日 ⁄ 综合 ⁄ 共 7096字 ⁄ 字号 评论关闭

此程序利用 WinRAR 程序对文件进行压缩,命令行语法可参考WinRAR中文帮助。

/// <summary>   
  1. /// 利用 WinRAR 进行压缩   
  2. /// </summary>   
  3. /// <param name="path">将要被压缩的文件夹(绝对路径)</param>   
  4. /// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>   
  5. /// <param name="rarName">压缩文件的名称(包括后缀)</param>   
  6. /// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>   
  7. public bool RAR(string path, string rarPath, string rarName)   
  8. {   
  9.     bool flag = false;   
  10.     string rarexe;       //WinRAR.exe 的完整路径   
  11.     RegistryKey regkey;  //注册表键   
  12.     Object regvalue;     //键值   
  13.     string cmd;          //WinRAR 命令参数   
  14.     ProcessStartInfo startinfo;   
  15.     Process process;   
  16.     try  
  17.     {   
  18.         regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");   
  19.         regvalue = regkey.GetValue("");  // 键值为 "d:\Program Files\WinRAR\WinRAR.exe" "%1"   
  20.         rarexe = regvalue.ToString();       
  21.         regkey.Close();   
  22.         rarexe = rarexe.Substring(1, rarexe.Length - 7);  // d:\Program Files\WinRAR\WinRAR.exe   
  23.         Directory.CreateDirectory(path);   
  24.         //压缩命令,相当于在要压缩的文件夹(path)上点右键 ->WinRAR->添加到压缩文件->输入压缩文件名(rarName)   
  25.         cmd = string.Format("a {0} {1} -r", rarName, path);   
  26.         startinfo = new ProcessStartInfo();   
  27.         startinfo.FileName = rarexe;   
  28.         startinfo.Arguments = cmd;                          //设置命令参数   
  29.         startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口   
  30.         startinfo.WorkingDirectory = rarPath;   
  31.         process = new Process();   
  32.         process.StartInfo = startinfo;   
  33.         process.Start();   
  34.         process.WaitForExit(); //无限期等待进程 winrar.exe 退出   
  35.         if (process.HasExited)   
  36.         {   
  37.             flag = true;   
  38.         }   
  39.         process.Close();   
  40.     }   
  41.     catch (Exception e)   
  42.     {   
  43.         throw e;   
  44.     }   
  45.     return flag;   
  46. }   
  47. /// <summary>   
  48. /// 利用 WinRAR 进行解压缩   
  49. /// </summary>   
  50. /// <param name="path">文件解压路径(绝对)</param>   
  51. /// <param name="rarPath">将要解压缩的 .rar 文件的存放目录(绝对路径)</param>   
  52. /// <param name="rarName">将要解压缩的 .rar 文件名(包括后缀)</param>   
  53. /// <returns>true 或 false。解压缩成功返回 true,反之,false。</returns>   
  54. public bool UnRAR(string path, string rarPath, string rarName)   
  55. {   
  56.     bool flag = false;   
  57.     string rarexe;   
  58.     RegistryKey regkey;   
  59.     Object regvalue;   
  60.     string cmd;   
  61.     ProcessStartInfo startinfo;   
  62.     Process process;   
  63.     try  
  64.     {   
  65.         regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");   
  66.         regvalue = regkey.GetValue("");   
  67.         rarexe = regvalue.ToString();   
  68.         regkey.Close();   
  69.         rarexe = rarexe.Substring(1, rarexe.Length - 7);   
  70.         Directory.CreateDirectory(path);   
  71.         //解压缩命令,相当于在要压缩文件(rarName)上点右键 ->WinRAR->解压到当前文件夹   
  72.         cmd = string.Format("x {0} {1} -y", rarName, path);   
  73.         startinfo = new ProcessStartInfo();   
  74.         startinfo.FileName = rarexe;   
  75.         startinfo.Arguments = cmd;   
  76.         startinfo.WindowStyle = ProcessWindowStyle.Hidden;   
  77.         startinfo.WorkingDirectory = rarPath;   
  78.         process = new Process();   
  79.         process.StartInfo = startinfo;   
  80.         process.Start();   
  81.         process.WaitForExit();   
  82.         if (process.HasExited)   
  83.         {   
  84.             flag = true;   
  85.         }   
  86.         process.Close();   
  87.     }   
  88.     catch (Exception e)   
  89.     {   
  90.         throw e;   
  91.     }   
  92.     return flag;   
  93. }  
/// <summary>
/// 利用 WinRAR 进行压缩
/// </summary>
/// <param name="path">将要被压缩的文件夹(绝对路径)</param>
/// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>
/// <param name="rarName">压缩文件的名称(包括后缀)</param>
/// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>
public bool RAR(string path, string rarPath, string rarName)
{
    bool flag = false;
    string rarexe;       //WinRAR.exe 的完整路径
    RegistryKey regkey;  //注册表键
	Object regvalue;     //键值
	string cmd;          //WinRAR 命令参数
	ProcessStartInfo startinfo;
    Process process;
    try
    {
        regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
        regvalue = regkey.GetValue("");  // 键值为 "d:\Program Files\WinRAR\WinRAR.exe" "%1"
        rarexe = regvalue.ToString();    
        regkey.Close();
        rarexe = rarexe.Substring(1, rarexe.Length - 7);  // d:\Program Files\WinRAR\WinRAR.exe
        Directory.CreateDirectory(path);
        //压缩命令,相当于在要压缩的文件夹(path)上点右键 ->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
        cmd = string.Format("a {0} {1} -r", rarName, path);
        startinfo = new ProcessStartInfo();
        startinfo.FileName = rarexe;
        startinfo.Arguments = cmd;                          //设置命令参数
        startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口
        startinfo.WorkingDirectory = rarPath;
        process = new Process();
        process.StartInfo = startinfo;
        process.Start();
        process.WaitForExit(); //无限期等待进程 winrar.exe 退出
        if (process.HasExited)
        {
            flag = true;
        }
        process.Close();
	}
    catch (Exception e)
    {
        throw e;
    }
    return flag;
}
/// <summary>
/// 利用 WinRAR 进行解压缩
/// </summary>
/// <param name="path">文件解压路径(绝对)</param>
/// <param name="rarPath">将要解压缩的 .rar 文件的存放目录(绝对路径)</param>
/// <param name="rarName">将要解压缩的 .rar 文件名(包括后缀)</param>
/// <returns>true 或 false。解压缩成功返回 true,反之,false。</returns>
public bool UnRAR(string path, string rarPath, string rarName)
{
    bool flag = false;
    string rarexe;
    RegistryKey regkey;
    Object regvalue;
    string cmd;
    ProcessStartInfo startinfo;
    Process process;
    try
    {
        regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
        regvalue = regkey.GetValue("");
        rarexe = regvalue.ToString();
        regkey.Close();
        rarexe = rarexe.Substring(1, rarexe.Length - 7);
        Directory.CreateDirectory(path);
        //解压缩命令,相当于在要压缩文件(rarName)上点右键 ->WinRAR->解压到当前文件夹
        cmd = string.Format("x {0} {1} -y", rarName, path);
        startinfo = new ProcessStartInfo();
        startinfo.FileName = rarexe;
        startinfo.Arguments = cmd;
        startinfo.WindowStyle = ProcessWindowStyle.Hidden;
        startinfo.WorkingDirectory = rarPath;
        process = new Process();
        process.StartInfo = startinfo;
        process.Start();
        process.WaitForExit();
        if (process.HasExited)
        {
            flag = true;
        }
        process.Close();
    }
    catch (Exception e)
    {
        throw e;
    }
    return flag;
}

在dos或者cmd下用cd命令进入到winrar的安装目录后,输入unrar可出来以下提示:

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

<命令> 
  e             解压压缩文件到当前目录 
  l[t,b]        列出压缩文件[技术信息,简洁] 
  p             打印文件到标准输出设备 
  t             测试压缩文件 
  v[t,b]        详细列出压缩文件[技术信息,简洁] 
  x             用绝对路径解压文件 

<开关> 
  -             停止扫描 
  ac            压缩或解压后清除存档属性 
  ad            添加压缩文件名到目标路径 
  ap<格式>      添加路径到压缩文件中 
  av-           禁用用户身份校验 
  c-            禁用注释显示 
  cfg-          禁用读取配置 
  cl            名称转换为小写 
  cu            名称转换为大写 
  dh            打开共享文件 
  ep            从名称中排除路径 
  ep3           扩展路径为包含盘符的完全路径 
  f             刷新文件 
  id[c,d,p,q]   禁用消息 
  ierr          发送所有消息到标准错误设备 
  inul          禁用所有消息 
  ioff          完成一个操作后关闭 PC 电源 
  kb            保留损坏的已解压文件 
  n<文件>       仅包含指定的文件 
  n@            从标准输入设备读取文件名到包括 
  n@<列表>      在指定的文件列表包括文件 
  o+            覆盖已存在文件 
  o-            不覆盖已存在文件 
  oc            设置 NTFS 压缩属性 
  or            自动重命名文件 
  ow            保存或恢复文件所有者和组 
  p[密码]       设置密码 
  p-            不询问密码 
  r             递归子目录 
  ri<P>[:<S>]   设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间 
  sl<大小>      处理小于指定大小的文件 
  sm<大小>      处理超过指定大小的文件 
  ta<日期>      添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS 
  tb<日期>      添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS 
  tn<时间>      添加 <时间> 以后的文件 
  to< 时间>      添加 <时间> 以前的文件 
  ts<m,c,a>[N]  保存或恢复文件时间(修改,创建,访问) 
  u             更新文件 
  v             列出所有卷 
  ver[n]        文件版本控制 
  vp            每卷之前暂停 
  x<文件>       排除指定的文件 
  x@            从标准输入设备读取要排除的文件名 
  x@<列表>      排除指定列表文件中的文件 
  y             假设对全部询问都回答是

在DOS(cmd)下使用WinRAR解缩文件具体举例:
假设,d 盘中有一个 winrar.rar,要解压到F盘中的hello文件夹中,则在dos下输入以下命令即可:
unrar x d:\winrar.rar F:\hello\

抱歉!评论已关闭.