前提:必须安装 WinRAR

1. 工具类

  1. using System;
  2. using System.Diagnostics;
  3. using System.IO;
  4. using Microsoft.Win32;
  5. namespace Util
  6. {
  7. public class RARClass
  8. {
  9. /// <summary>
  10. /// 获取WinRAR.exe路径
  11. /// </summary>
  12. /// <returns>为空则表示未安装WinRAR</returns>
  13. public static string ExistsRAR()
  14. {
  15. RegistryKey regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
  16. //RegistryKey regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
  17. string strkey = regkey.GetValue("").ToString();
  18. regkey.Close();
  19. //return strkey.Substring(1, strkey.Length - 7);
  20. return strkey;
  21. }
  22. /// <summary>
  23. /// 解压RAR文件
  24. /// </summary>
  25. /// <param name="rarFilePath">要解压的文件路径</param>
  26. /// <param name="unrarDestPath">解压路径(绝对路径)</param>
  27. public static void UnRAR(string rarFilePath, string unrarDestPath)
  28. {
  29. string rarexe = ExistsRAR();
  30. if (String.IsNullOrEmpty(rarexe))
  31. {
  32. throw new Exception("未安装WinRAR程序。");
  33. }
  34. try
  35. {
  36. //组合出需要shell的完整格式
  37. string shellArguments = string.Format("x -o+ \"{0}\" \"{1}\\\"", rarFilePath, unrarDestPath);
  38. //用Process调用
  39. using (Process unrar = new Process())
  40. {
  41. ProcessStartInfo startinfo = new ProcessStartInfo();
  42. startinfo.FileName = rarexe;
  43. startinfo.Arguments = shellArguments;               //设置命令参数
  44. startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口
  45. unrar.StartInfo = startinfo;
  46. unrar.Start();
  47. unrar.WaitForExit();//等待解压完成
  48. unrar.Close();
  49. }
  50. }
  51. catch
  52. {
  53. throw;
  54. }
  55. }
  56. /// <summary>
  57. ///  压缩为RAR文件
  58. /// </summary>
  59. /// <param name="filePath">要压缩的文件路径(绝对路径)</param>
  60. /// <param name="rarfilePath">压缩到的路径(绝对路径)</param>
  61. public static void RAR(string filePath, string rarfilePath,  string otherPara )
  62. {
  63. RAR(filePath, rarfilePath, "", "", otherPara);
  64. }
  65. /// <summary>
  66. ///  压缩为RAR文件
  67. /// </summary>
  68. /// <param name="filePath">要压缩的文件路径(绝对路径)</param>
  69. /// <param name="rarfilePath">压缩到的路径(绝对路径)</param>
  70. /// <param name="rarName">压缩后压缩包名称</param>
  71. public static void RAR(string filePath, string rarfilePath, string rarName, string otherPara)
  72. {
  73. RAR(filePath, rarfilePath, rarName, "", otherPara);
  74. }
  75. /// <summary>
  76. ///  压缩为RAR文件
  77. /// </summary>
  78. /// <param name="filePath">要压缩的文件路径(绝对路径)</param>
  79. /// <param name="rarfilePath">压缩到的路径(绝对路径)</param>
  80. /// <param name="rarName">压缩后压缩包名称</param>
  81. /// <param name="password">解压密钥</param>
  82. public static void RAR(string filePath, string rarfilePath, string rarName, string password, string otherPara)
  83. {
  84. string rarexe = ExistsRAR();
  85. if (String.IsNullOrEmpty(rarexe))
  86. {
  87. throw new Exception("未安装WinRAR程序。");
  88. }
  89. if (!Directory.Exists(filePath))
  90. {
  91. //throw new Exception("文件不存在!");
  92. }
  93. if (String.IsNullOrEmpty(rarName))
  94. {
  95. rarName = Path.GetFileNameWithoutExtension(filePath) + ".rar";
  96. }
  97. else
  98. {
  99. if (Path.GetExtension(rarName).ToLower() != ".rar")
  100. {
  101. rarName += ".rar";
  102. }
  103. }
  104. try
  105. {
  106. //Directory.CreateDirectory(rarfilePath);
  107. //压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
  108. string shellArguments;
  109. if (String.IsNullOrEmpty(password))
  110. {
  111. shellArguments = string.Format("a -ep1 \"{0}\" \"{1}\" -r", rarName, filePath);
  112. }
  113. else
  114. {
  115. shellArguments = string.Format("a -ep1 \"{0}\" \"{1}\" -r -p\"{2}\"", rarName, filePath, password);
  116. }
  117. if (!string.IsNullOrEmpty(otherPara))
  118. {
  119. shellArguments = shellArguments + " " + otherPara;
  120. }
  121. using (Process rar = new Process())
  122. {
  123. ProcessStartInfo startinfo = new ProcessStartInfo();
  124. startinfo.FileName = rarexe;
  125. startinfo.Arguments = shellArguments;               //设置命令参数
  126. startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口
  127. startinfo.WorkingDirectory = rarfilePath;
  128. rar.StartInfo = startinfo;
  129. rar.Start();
  130. rar.WaitForExit(); //无限期等待进程 winrar.exe 退出
  131. rar.Close();
  132. }
  133. }
  134. catch
  135. {
  136. throw;
  137. }
  138. }
  139. }
  140. }

2. 测试程序

    1. using System;
    2. using Util;
    3. namespace ConsoleApplication2
    4. {
    5. class Program
    6. {
    7. static void Main(string[] args)
    8. {
    9. string path = "d:\\data.txt";
    10. string rarPath = "d:\\";
    11. string rarName = "";
    12. RARClass.RAR(path, rarPath, rarName, "-agYYYYMMDD -ibck");
    13. Console.WriteLine("End");
    14. Console.Read();
    15. }
    16. }
    17. }

如何用C#+WinRAR 实现压缩 分类:的更多相关文章

  1. C#利用WinRAR实现压缩和解压缩

    using System; using Microsoft.Win32; using System.Diagnostics; using System.IO; namespace MSCL { /// ...

  2. WinRAR(WinZip)压缩与解压实现(C#版Window平台)

    本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用). 先来看WinRAR(WinZip)自身的支持调用命令: 压缩命 ...

  3. 【转载】使用Winrar对压缩文件进行加密,并且给定解压密码

    有时候我们从网上下载的压缩包文件,如.rar文件.zip文件等,解压的时候需要输入解压密码才可顺利解压,否则解压失败.其实像这种情况,是压缩包制作者在压缩文件的时候对压缩文件进行了加密,输入了压缩包解 ...

  4. C# 使用WinRar命令压缩和解压缩

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. c#调用WinRAR软件压缩和解压文件

    using System; using System.Collections.Generic; using System.Web; using System.IO; using System.Linq ...

  6. 批处理用WINRAR只压缩某类型的文件

    1:新建文件夹sql back 和 back,在sql back 文件夹内新建test1.dbb和test2.bak文件 2:新建批处理文件rar.bat,编辑文件: @echo off for %% ...

  7. 利用YaHoo YUI实现Javascript CSS 压缩 分类: C# 2014-07-13 19:07 371人阅读 评论(0) 收藏

    网站优化时,往往需要对js文件,css文件进行压缩,以达到减少网络传输数据,减少网页加载时间:利用YaHoo的YUI可以实现Javascript,CSS,压缩,包括在线的js压缩和程序压缩,发现C#也 ...

  8. winrar 压缩文件方法

    问题描述: 我要一些大的文件进行压缩,看了网上有很多类拟的写法.但在我这都存在两个问题. 1.就是他们都是通过注册表找到rar的exe目录.我安装好winrar后,虽然注册表有,但那个目录一直报一个错 ...

  9. WinRar 压缩接压缩文件

    windows  WinRAR 定时压缩文件 命名当天时间 设置时间格式: set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" 指定 WinRAR ...

随机推荐

  1. hibernate的三表查询

    表的关系: Cardgraderule      1:n     Cardgrade Cardgrade           1:n     Acardtype 实体类: public class C ...

  2. 【USACO 2.3】Controlling Companies (递推)

    题意:A公司对B公司有控制权的条件是满足下面条件之一:A=B,A对B的股份超过50%,A控制的公司对B的股份之和超过50%. 分析:我把控制关系分个等级:第一级是直接的股份超过50%,第二级是至少需要 ...

  3. 整块div设置为超链接进行界面跳转

    鼠标点击当前整块DIV任意一个地方均可进行页面跳转,如果复制过去的代码不能用,请注意双引号和单引号,是否为英文状态下的输入法填写出来的. 1.跳转至新建页面 <div class="& ...

  4. WKWebView与JS交互,UIWebView+JavascriptCore和JS交互

    最近一直在做有关Swift和JavaScript交互的程序,所以有关UIWebView和WKWebView在使用上的差别在此总结下: UIWebView: (1)创建 var webView: UIW ...

  5. 常见linux命令释义(第九天)—— Bash Shell 的操作环境Shell 中的管道命令一些管道命令

    最近好懒好懒.连写文章都写不好了.于是只能写读一点书,记一点读书笔记了.太懒了,没办法.慢慢恢复自己的状态吧. 管道命令仅会处理strandard output 的内容,对于strandard err ...

  6. Structure Of Management Information - SNMP Tutorial

    30.6 The Structure Of Management Information In addition to the standards that specify MIB variables ...

  7. PL/SQL设置主键自增

    oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu:   一.创建表 create table menu( menuId n ...

  8. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  9. 如何扩大LVM 逻辑分区的大小?

    参考: (http://blog.csdn.net/t0nsha/article/details/7296851) LVM (Logical volume management) 执行 df 指令查看 ...

  10. javascript数据结构与算法--链表

    链表与数组的区别?  1. 定义: 数组又叫做顺序表,顺序表是在内存中开辟一段连续的空间来存储数据,数组可以处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小. ...