【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

关于本文档的说明

  本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件http://www.cnblogs.com/wohexiaocai/p/5469253.html,实际项目中也会用到rar压缩,所以总结了一下代码,之后简单的几个函数。

  欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利。

  本人自从几年前走上编程之路,一直致力于收集和总结出好用的框架和通用类库,不管是微软自己的还是第三方的只要实际项目中好用且可以解决实际问题那都会收集好,编写好文章和别人一起分享,这样自己学到了,别人也能学到知识,当今社会很需要知识的搬运工。

Email:[email protected]

  本文章地址:http://www.cnblogs.com/wohexiaocai/p/5475506.html

1.基本介绍

一般BS的项目我们都有一个功能叫做【下载excel】,或者【下载word】,下载excel一般都是根据查询条件查询得到明细数据,生成excel,经过压缩返回文件流响应浏览器进行下载动作,所以这个小功能就需要用到压缩和生成excel的两个知识点,今天我分享一下rar压缩在实际项目的用途。

  rar压缩文件需要在服务器安装程序,但是一般服务器都会使用他来作为压缩工具的,我在阿里云的ECS也是默认就用的这个,服务器安装一下就可以了

  rar的优点

  1. 安装包非常好
  2. 提供很好的技术文档
  3. 通过命令的方式进行压缩,编写程序较为简单
  4. 使用普遍

2.实际项目

  1. 检查电脑是否安装了WinRAR
  2. 文件或者文件夹压缩
  3. 文件解压到文件夹中
  4. 等等

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

   例子命令

  1. 添加文件夹 "c:\latest data" 到压缩文件 Info.rar 中

WinRAR a Info.rar "c:\latest data"

  1. 解压压缩文件 Info.rar 到文件夹 d:\data

WinRAR x Info.rar d:\data\

2.3 解压文件到指定的文件夹路径

        /// <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

时间: 2024-12-08 12:04:41

【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货的相关文章

【转】Java压缩和解压文件工具类ZipUtil

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1 package com.utility.zip; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import jav

c#自带类实现的多文件压缩和解压

c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容.下面的代码没有把多文件的目录结构加进去 using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; namespace Test.Zip { class CompressHelper { /// <su

【C#公共帮助类】ZipHelper 压缩和解压帮助类,经过实战总结出来的代码

关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集和总结出好用的框架和通用类库,不管是微软自己的还是第三方的只要实际项目中好用且可以解决实际问题那都会收集好,编写好文章和别人一起分享,这样自己学到了,别人也能学到知识,当今社会很需要知识的搬运工. Email:[email prote

ZipHelper C#公共类 压缩和解压

关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 1.基本介绍 由于项目中需要用到各种压缩将文件进行压缩下载,减少网络的带宽,所以压缩是一个非常常见的功能,对于压缩微软自己也提供了一些类库 微软自带压缩类ZipArchive类,适合NET FrameWork4.5才可以使用 调用压缩软件命令执行压缩动作,这个就需要电脑本身安装压缩软件了 使用第三方的压缩dll文件,一般使用最多的是(ICSha

C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用

工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的dll就是ICSharpCode.SharpZipLib.dll,废话不多了,网上也有很多的资料,我将其最常用的两个函数整理了一下,提供了一个通用的类,这样在工作中可以快速的完成压缩和解压缩的动作哦 官网下载地址:  http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx 1. 在项目中添加对ICSharpCode.SharpZipLib.dll的引用: 2. 在需要

java工具类——java将一串数据按照gzip方式压缩和解压缩

我要整理在工作中用到的工具类分享出来,也方便自己以后查阅使用,这些工具类都是我自己实际工作中使用的 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio

Java Gzip类 - base64压缩和解压

public final class ZipUtil { public static String CompressToBase64(String string){ try { ByteArrayOutputStream os = new ByteArrayOutputStream(string.length()); GZIPOutputStream gos = new GZIPOutputStream(os); gos.write(string.getBytes()); gos.close()

ZipHelper 压缩和解压帮助类,经过实战总结出来的代码

ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利. 本人自从几年前走上编程之路,一直致力于收集和总结出好用的框 ... bbs.chinaacc.com/forum-2-26/topic-5688150.html bbs.chinaacc.com/forum-2-26/topic-5688169.html bbs.chinaacc.com/forum-2

Linux里面的压缩和解压类指令

gzip/gunzip 指令 ( .gz  不能压缩目录) gzip 用于压缩文件, gunzip 用于解压的 . gzip gzip命令用来压缩文件.gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处".gz"扩展名.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式.据统计,gzip命令对文本文件有60%