WinRarHelper帮助类
WinRarHelper帮助类
关于本文档的说明
本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件http://www.cnblogs.com/wohexiaocai/p/5469253.html,实际项目中也会用到rar压缩,所以总结了一下代码,之后简单的几个函数。
欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利。
本人自从几年前走上编程之路,一直致力于收集和总结出好用的框架和通用类库,不管是微软自己的还是第三方的只要实际项目中好用且可以解决实际问题那都会收集好,编写好文章和别人一起分享,这样自己学到了,别人也能学到知识,当今社会很需要知识的搬运工。
Email:707055073@qq.com
本文章地址:http://www.cnblogs.com/wohexiaocai/p/5475506.html
1.基本介绍
一般BS的项目我们都有一个功能叫做【下载excel】,或者【下载word】,下载excel一般都是根据查询条件查询得到明细数据,生成excel,经过压缩返回文件流响应浏览器进行下载动作,所以这个小功能就需要用到压缩和生成excel的两个知识点,今天我分享一下rar压缩在实际项目的用途。
rar压缩文件需要在服务器安装程序,但是一般服务器都会使用他来作为压缩工具的,我在阿里云的ECS也是默认就用的这个,服务器安装一下就可以了
rar的优点
- 安装包非常好
- 提供很好的技术文档
- 通过命令的方式进行压缩,编写程序较为简单
- 使用普遍
2.实际项目
- 检查电脑是否安装了WinRAR
- 文件或者文件夹压缩
- 文件解压到文件夹中
- 等等
2.1 检查电脑有没有安装WinRAR
这里获取到WinRAR的安装路径,最好的办法就是读取注册表,从注册表获取到他的安装全路径
64位系统WinRAR注册表路径是:SOFTWARE\Wow6432Node\WinRAR
32位系统WinRAR注册表路径是:SOFTWARE\WinRAR
他们都在注册表的【HKEY_LOCAL_MACHINE】节点下面,所以你需要打开注册表命令(regedit),来检查服务器WinRAR有没有安装。

2.2 压缩文件/文件夹
上面第一步完成了,需要就可以开始压缩了,这里脑部一下需要通过命令的模式来调用WinRAR,rar命令说明文档下载:http://files.cnblogs.com/files/wohexiaocai/WinRAR.zip
例子命令
- 添加文件夹 "c:\latest data" 到压缩文件 Info.rar 中
WinRAR a Info.rar "c:\latest data"
- 解压压缩文件 Info.rar 到文件夹 d:\data
WinRAR x Info.rar d:\data\
2.3 解压文件到指定的文件夹路径
|
1
2
3
4
5
6
7
8
|
/// <summary>/// 解压到某个文件夹中/// </summary>/// <param name="rarFilePath">rar文件全路径</param>/// <param name="unRarPath">解压到哪个文件夹</param>/// <param name="password">解压密码</param>/// <param name="isOverride">是否覆盖</param>public void UnRar(string rarFilePath, string unRarPath, string password = null, bool isOverride = false) |
注释也写得很详细的,所以使用的时候再也不用担心这个方法的参数应该怎么传值,我用过很多第三方的dll,调用的时候好费劲传参数,不知道到底应该传什么,一点都不方便,所以我写代码一般都喜欢用源码进行调试,不喜欢引用dll,源码我可以调试出bug。
3.调用代码参考
由于这个帮助类不是静态的,所以需要实例化

// 实例化就已经得到系统WinRAR的安装路径了
WinRarHelper rarHelper = new WinRarHelper();
// 这里可以指定rar实际的安装路径
// rarHelper.WinRarPath = "";
// 压缩
rarHelper.Rar(@"C:\Users\yhl\Desktop\单号图片", @"C:\Users\yhl\Desktop\单号图片.rar");
// 解压
rarHelper.UnRar(@"C:\Users\yhl\Desktop\单号图片.rar", @"C:\Users\yhl\Desktop\单号图片");

下面还是调用常用的方法,就可以了。
4.WinRarHelper下载
1 //-------------------------------------------------------------------------------------
2 // All Rights Reserved , Copyright (C) 2016 , ZTO , Ltd .
3 //-------------------------------------------------------------------------------------
4
5 using System;
6 using System.Diagnostics;
7 using System.IO;
8 using Microsoft.Win32;
9
10 namespace ZTO.TestDb
11 {
12 /// <summary>
13 /// WinRAR压缩操作帮助类
14 ///
15 /// 修改纪录
16 ///
17 /// 2016-5-9 版本:1.0 YangHengLian 创建主键,注意命名空间的排序,测试非常好。
18 /// 2016-5-13 加上了自动获取WinRAR安装路径的函数,不管是64位还是32位系统,
19 ///
20 /// 版本:1.0
21 ///
22 /// <author>
23 /// <name>YangHengLian</name>
24 /// <date>2016-5-9</date>
25 /// </author>
26 /// </summary>
27 public class WinRarHelper
28 {
29 #region 属性
30 private string _winRarPath;
31
32 /// <summary>
33 /// WinRAR安装路径,可以自己设置,默认读取系统注册表
34 /// </summary>
35 public string WinRarPath
36 {
37 get
38 {
39 return string.IsNullOrEmpty(_winRarPath) ? GetWinRarInstallPath() : _winRarPath;
40 }
41 set
42 {
43 _winRarPath = value;
44 }
45 }
46 #endregion
47
48 /// <summary>
49 /// 解压到某个文件夹中
50 /// </summary>
51 /// <param name="rarFilePath">rar文件全路径</param>
52 /// <param name="unRarPath">解压到哪个文件夹</param>
53 /// <param name="password">解压密码</param>
54 /// <param name="isOverride">是否覆盖</param>
55 public void UnRar(string rarFilePath, string unRarPath, string password = null, bool isOverride = false)
56 {
57 if (IsSetUpWinRar())
58 {
59 throw new ArgumentNullException("WinRAR未安装");
60 }
61 RunCmd(string.Format("x{0} -o{1} {2} {3}", (password == null ? "" : " -p" + password), (isOverride ? "+" : "-"), rarFilePath, unRarPath));
62 }
63
64 /// <summary>
65 /// 压缩文件或者文件夹为压缩包
66 /// </summary>
67 /// <param name="filePath">需要压缩的文件/文件夹全路径</param>
68 /// <param name="saveFilePath">压缩文件保存全路径</param>
69 /// <param name="isOverride">是否覆盖</param>
70 /// <param name="password">压缩文件密码</param>
71 public void Rar(string filePath, string saveFilePath, bool isOverride = false, string password = null)
72 {
73 if (IsSetUpWinRar())
74 {
75 throw new ArgumentNullException("WinRAR未安装");
76 }
77 RunCmd(string.Format("a{0} -o{1} -ep2 -r {2} {3}", (password == null ? "" : " -p" + password), (isOverride ? "+" : "-"), saveFilePath, filePath));
78 }
79
80 /// <summary>
81 /// 解压是否安装了WinRAR程序
82 /// </summary>
83 /// <returns></returns>
84 public bool IsSetUpWinRar()
85 {
86 if (!string.IsNullOrEmpty(WinRarPath))
87 {
88 return File.Exists(WinRarPath);
89 }
90 var inistallPath = GetWinRarInstallPath();
91 if (string.IsNullOrEmpty(inistallPath))
92 {
93 return false;
94 }
95 WinRarPath = inistallPath;
96 return true;
97 }
98
99 /// <summary>
100 /// 从注册表中获取WinRAR的安装路径
101 /// </summary>
102 /// <returns></returns>
103 public string GetWinRarInstallPath()
104 {
105 var openKey = @"SOFTWARE\Wow6432Node\WinRAR";//64位注册表
106 if (IntPtr.Size == 4)
107 {
108 openKey = @"SOFTWARE\WinRAR";//32位注册表路径
109 }
110 RegistryKey appPath = Registry.LocalMachine.OpenSubKey(openKey);
111 if (appPath != null)
112 {
113 // WinRAR安装具体路径
114 string path = appPath.GetValue("exe32").ToString();
115 if (File.Exists(path))
116 {
117 return path;
118 }
119 }
120 return null;
121 }
122
123 /// <summary>
124 /// 执行rar内部命令
125 /// </summary>
126 /// <param name="cmd">要执行的命令</param>
127 public void RunCmd(string cmd)
128 {
129 using (var p = new Process())
130 {
131 p.StartInfo.FileName = WinRarPath;
132 p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
133 p.StartInfo.Arguments = cmd;
134 p.Start();
135 p.WaitForExit();
136 }
137 }
138 }
139 }
WinRarHelper帮助类的更多相关文章
- 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货
关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- WinRAR压缩操作帮助类
//------------------------------------------------------------------------------------- // All Right ...
- C++ 可配置的类工厂
项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
随机推荐
- C++ 中mallon动态分配内存大小用法
#include<iostream> using namespace std; int main(){ char *s; int n; cin>>n; s= (char *) ...
- 05-UIKit(UITableViewController)
目录: 一.UITableViewController(表视图控制器) 二.委托协议 三.tableview工作过程(三问一响应) 四.UITableViewCell 回到顶部 一.UITableVi ...
- 知识点1-1:什么是ASP.NET MVC
ASP.NET MVC是微软.NET平台上的一个Web开发框架,它为开发者提供了一种构建结构良好的Web应用程序的方式.自2007年首次公布预览以来,作为Web Form的替代品,ASP.NET MV ...
- windows下使用openssl的一种方法
下载openssl之后,全部解压到一个路径下,如:c:\program files\openssl sdk 举个例子,如使用SHA1,开发时引用头文件: #include <sha.h> ...
- MongoDB(二)——安装配置了解
前边介绍了MongoDB的大概理论知识,这篇来对MongoDB进行一下安装使用,支持安装在windows和linux上,当然了很多其它情况下我们是安装在linux上,由于毕竟server用linux的 ...
- Unity 3D 建立开发环境
之后的基本方向 ios游戏开发,基础教程http://www.devdiv.com/unity_d_-thread-128068-1-1.html,学习Unity 3D游戏开发. 应该昨天表示,读了一 ...
- QObject,有一个生存线程(慢慢体会)
moveToThread本来就是操作QObject的 比如把当前对象移到主线程里: myObject->moveToThread(QApplication::instance()-> ...
- 用 Eclipse 下载 Git 仓库中代码
1. 安装 Git 插件 可以按照 通过Eclipse从subversion站点下载源码 中的方法安装,也可以在 Eclipse Marketplace 中搜索 EGit 进行安装(Help --&g ...
- java基础之& 和 && 的差别
&和&&都能够用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,仅仅要有一方为false,则结果为false. ...
- VM中装Linux换ISO文件报错"该光盘无法被挂载"
一.发现问题 利用VM安装Red Hat Linux的时候,第一个iso安装完毕,准备换第二个iso,报错“该光盘无法被挂载”. 二.解决办法 上面的菜单栏中“虚拟机”—>“设置”—>“硬 ...