前提:必须安装 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. memcached

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  2. 编译安装apache

    1.安装依赖库:“Development  Tools”  “Server Platform Development”  pcre-devel 2.安装apr,apr-util 从yum源安装或去ap ...

  3. [转]ExtJs:xtype的含义

    原文地址:http://www.cnblogs.com/timy/archive/2010/08/13/1799111.html 根据我在EXT论坛上的观察,xtype用起来的时候疑惑会比较多.甚至有 ...

  4. Sikuli图形脚本测试工具安装及介绍(适合小白的测试神器)

    sikuli简单安装以及介绍附图: 一.简单介绍 SikuliX官方网站:https://launchpad.net/sikuli/(官方的最新版本是SikuliX1.1.0更新于2015-10-06 ...

  5. Git从入门到学会

    Git简介 Git是什么? Git和SVN一样都是一种高效的管理代码的系统. Git是目前世界上最先进的分布式版本控制系统(没有之一). 创建版本库 什么是版本库呢?版本库又名仓库,英文名reposi ...

  6. BZOJ 1432: [ZJOI2009]Function

    1432: [ZJOI2009]Function Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1046  Solved: 765[Submit][Sta ...

  7. bzoj2083【Poi2010】Intelligence test

    听说正解是链表,然而被我暴力水过了 先开vector记录每个数在原串中出现的位置 之后对于每个匹配串的每一位,找比当前位置大的第一个当前元素是哪个,有就更新,没有就"NIE" #i ...

  8. HttpClient 4.3 使用

    httpclient的api变化很快,本篇随笔记录自己使用4.3.6版本时所做的设置.版本虽然不是最新,但达到了目的就行. maven依赖: <dependency> <groupI ...

  9. Google 地图 API V3 之 叠加层

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  10. group by 查询分组后 组的条数

    比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select c ...