前提:必须安装 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. IE下a标签后面的span元素向右浮动后错位

    错误原因span放在了a标签之后 正确写法是放在之前 如下: <li><span>2016-07-29</span><a href="#" ...

  2. Leetcode 230. Kth Smallest Element in a BST

    Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...

  3. Windows操作系统待整理

    12. 2001年10月25日Windows XP发布,Windows XP是基于Windows 2000代码的产品,同时拥有一个新的用户图形界面(叫做月神Luna),它包括了一些细微的修改.集成了防 ...

  4. 精简高效的css命名准则

    对于css,为了避免样式冲突,我们总会赋予相当特殊的命名,或是在选择符上添加html标记,或是使用层级.我们为避免在冲突上做文章,就会把代码的命名变得复杂化. 如果css的重用性越高,相比就越高效.如 ...

  5. junit学习笔记

    junit编程规范 测试方法上必须使用@Test进行修饰 测试方法必须使用public void 进行修饰,不能带任何的参数 新建一个源代码目录 测试类的包应该和被测试类保持一致 测试单元中的每个方法 ...

  6. Yii2中如何将Jquery放在head中的方法

    原文地址: https://my.oschina.net/kenblog/blog/547602 方法一(推荐):针对jquery进行components配置,指定Yii2自带jquery自带资源出现 ...

  7. Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图             ...

  8. Sql Server FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  9. PL/SQL Developer 连接 64位Oracle 服务端 解决方案

    PL/SQL是32位程序,只能通过32位的Oracle驱动连接Oracle服务器.如果Oracle服务器是64位的,那么只能通过需要通过一个32位的Oracle客户端,来搭建连接. 到官网下载一个客户 ...

  10. SVN版本库(访问权限)配置实例笔记

    http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...