前提:必须安装 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. SignalR主动通知订阅者示例

    html代码: <script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script> <scri ...

  2. Spinner

    资源的方式添加 安卓中的下拉框 Spinner可以通过xml string中配置 <string-array name="spingarr"> <item> ...

  3. Android进程整理

    一.概括 系统启动架构图: 上图在Android系统-开篇中有讲解,是从Android系统启动的角度来分析,本文是从进程/线程的视角来分析该问题. 1.1 父进程 在所有进程中,以父进程的姿态存在的进 ...

  4. java高新技术-操作javaBean

    1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...

  5. bzoj2194: 快速傅立叶之二

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  6. Thinkphp中controller控制器根据curl函数请求数据

    public function member(){ $url="http://aitequn.tjnit.com/UserAction_findAllUser"; $ch =cur ...

  7. 学习.Net的经典网站

    学习.Net的经典网站 收藏 还不错推荐给大家 原文-- 名称:快速入门 地址:http://chs.gotdotnet.com/quickstart/ 描述:本站点是微软.NET技术的快速入门网站, ...

  8. fedora 24 使用扇贝网页版没有声音

    (扇贝的官方答疑:https://www.shanbay.com/help/faq/no_voice/) 第4步下载MP3测试文件没办法使用: 似乎因为MP3格式的文件是的版权问题. 打算安装能处理M ...

  9. jquery + header

    官网上搜索headers 基本用法(直接用下楼上的代码了) $.ajax({ //请求类型,这里为POST type: 'POST', //你要请求的api的URL url: url , //是否使用 ...

  10. 关于学习JavaScript 的 高三编程 一些心得(三)

    最近在学习高三的 过程中,遇到的了一些 难以理解的问题, 在看到第五章之前都是 OK 的.但是到了 引用类型的时候就有点蒙了. 首先我们看下,引用类型的  解释:[引用类型的值(对象)是引用类型的一个 ...