C#实现rar压缩与解压缩文件的方法

作者:春哥也编程 时间:2021-11-04 20:33:28 

本文实例讲述了C#实现rar压缩与解压缩文件的方法。分享给大家供大家参考。具体分析如下:

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


/// 利用 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;  
}
/// <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\

希望本文所述对大家的C#程序设计有所帮助。

标签:C#,rar
0
投稿

猜你喜欢

  • Spring Security实现两周内自动登录"记住我"功能

    2021-12-15 17:59:22
  • Android仿通话来电界面效果

    2022-01-02 07:48:51
  • C#实现Base64处理的加密解密,编码解码示例

    2023-07-15 12:11:31
  • Feign如何自定义注解翻译器

    2022-11-09 07:05:04
  • java中初始化MediaRecorder的实现方法

    2023-11-29 03:54:52
  • Java编写实现坦克大战小游戏

    2023-11-24 09:15:34
  • Android Studio实现音乐播放器的全过程(简单易上手)

    2023-07-10 08:02:43
  • C#通过标签软件Bartender的ZPL命令打印条码

    2022-05-22 01:30:40
  • 详解Java中String类的各种用法

    2022-03-10 12:48:35
  • Android使用手势监听器GestureDetector遇到的不响应问题

    2022-02-27 23:52:40
  • Java实现多任务执行助手

    2023-05-17 14:15:30
  • java实现图片写入高清字体及带边框的方法

    2023-11-29 03:43:47
  • Java GZip 基于内存实现压缩和解压的方法

    2023-05-24 12:47:29
  • Java实现注册登录与邮箱发送账号验证激活功能

    2023-11-05 09:21:57
  • 解决Spring Batch框架job任务只跑一次的问题

    2023-01-07 00:13:53
  • Java读取txt文件中的数据赋给String变量方法

    2022-08-04 22:32:19
  • Java Arrays.asList使用方法解析

    2023-11-26 06:27:09
  • jbuilder2006连接sqlserver2000的方法

    2022-08-21 14:20:09
  • Java 十大排序算法之插入排序刨析

    2021-12-07 02:48:54
  • Bean Searcher配合SpringBoot的使用详解

    2022-06-21 23:49:00
  • asp之家 软件编程 m.aspxhome.com