首页 > 编程 > C# > 正文

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

2019-10-29 21:42:15
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C#实现rar压缩与解压缩文件的方法,实例分析了C#利用winrar程序实现文件的压缩与解压缩的相关技巧,需要的朋友可以参考下

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

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

 

 
  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. }  
  94. /// <summary> 
  95. /// 利用 WinRAR 进行压缩 
  96. /// </summary> 
  97. /// <param name="path">将要被压缩的文件夹(绝对路径)</param> 
  98. /// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param> 
  99. /// <param name="rarName">压缩文件的名称(包括后缀)</param> 
  100. /// <returns>true 或 false。压缩成功返回 true,反之,false。</returns> 
  101. public bool RAR(string path, string rarPath, string rarName) 
  102. bool flag = false
  103. string rarexe; //WinRAR.exe 的完整路径 
  104. RegistryKey regkey; //注册表键 
  105. Object regvalue; //键值 
  106. string cmd; //WinRAR 命令参数 
  107. ProcessStartInfo startinfo; 
  108. Process process; 
  109. try 
  110. regkey = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRAR.exe/shell/open/command"); 
  111. regvalue = regkey.GetValue(""); // 键值为 "d:/Program Files/WinRAR/WinRAR.exe" "%1" 
  112. rarexe = regvalue.ToString();  
  113. regkey.Close(); 
  114. rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:/Program Files/WinRAR/WinRAR.exe 
  115. Directory.CreateDirectory(path); 
  116. //压缩命令,相当于在要压缩的文件夹(path)上点右键 ->WinRAR->添加到压缩文件->输入压缩文件名(rarName) 
  117. cmd = string.Format("a {0} {1} -r", rarName, path); 
  118. startinfo = new ProcessStartInfo(); 
  119. startinfo.FileName = rarexe; 
  120. startinfo.Arguments = cmd; //设置命令参数 
  121. startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 WinRAR 窗口 
  122. startinfo.WorkingDirectory = rarPath; 
  123. process = new Process(); 
  124. process.StartInfo = startinfo; 
  125. process.Start(); 
  126. process.WaitForExit(); //无限期等待进程 winrar.exe 退出 
  127. if (process.HasExited) 
  128. flag = true
  129. process.Close(); 
  130. catch (Exception e) 
  131. throw e; 
  132. return flag; 
  133. /// <summary> 
  134. /// 利用 WinRAR 进行解压缩 
  135. /// </summary> 
  136. /// <param name="path">文件解压路径(绝对)</param> 
  137. /// <param name="rarPath">将要解压缩的 .rar 文件的存放目录(绝对路径)</param> 
  138. /// <param name="rarName">将要解压缩的 .rar 文件名(包括后缀)</param> 
  139. /// <returns>true 或 false。解压缩成功返回 true,反之,false。</returns> 
  140. public bool UnRAR(string path, string rarPath, string rarName) 
  141. bool flag = false
  142. string rarexe; 
  143. RegistryKey regkey; 
  144. Object regvalue; 
  145. string cmd; 
  146. ProcessStartInfo startinfo; 
  147. Process process; 
  148. try 
  149. regkey = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRAR.exe/shell/open/command"); 
  150. regvalue = regkey.GetValue(""); 
  151. rarexe = regvalue.ToString(); 
  152. regkey.Close(); 
  153. rarexe = rarexe.Substring(1, rarexe.Length - 7); 
  154. Directory.CreateDirectory(path); 
  155. //解压缩命令,相当于在要压缩文件(rarName)上点右键 ->WinRAR->解压到当前文件夹 
  156. cmd = string.Format("x {0} {1} -y", rarName, path); 
  157. startinfo = new ProcessStartInfo(); 
  158. startinfo.FileName = rarexe; 
  159. startinfo.Arguments = cmd; 
  160. startinfo.WindowStyle = ProcessWindowStyle.Hidden; 
  161. startinfo.WorkingDirectory = rarPath; 
  162. process = new Process(); 
  163. process.StartInfo = startinfo; 
  164. process.Start(); 
  165. process.WaitForExit(); 
  166. if (process.HasExited) 
  167. flag = true
  168. process.Close(); 
  169. catch (Exception e) 
  170. throw e; 
  171. 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

[:] 设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间

sl<大小> 处理小于指定大小的文件

sm<大小> 处理超过指定大小的文件

ta<日期> 添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS

tb<日期> 添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS

tn<时间> 添加 <时间> 以后的文件

to< 时间> 添加 <时间> 以前的文件

ts[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#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表