关于本文档的说明

  本文档使用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的优点

  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下载

 //-------------------------------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2016 , ZTO , Ltd .
//------------------------------------------------------------------------------------- using System;
using System.Diagnostics;
using System.IO;
using Microsoft.Win32; namespace ZTO.TestDb
{
/// <summary>
/// WinRAR压缩操作帮助类
///
/// 修改纪录
///
/// 2016-5-9 版本:1.0 YangHengLian 创建主键,注意命名空间的排序,测试非常好。
/// 2016-5-13 加上了自动获取WinRAR安装路径的函数,不管是64位还是32位系统,
///
/// 版本:1.0
///
/// <author>
/// <name>YangHengLian</name>
/// <date>2016-5-9</date>
/// </author>
/// </summary>
public class WinRarHelper
{
#region 属性
private string _winRarPath; /// <summary>
/// WinRAR安装路径,可以自己设置,默认读取系统注册表
/// </summary>
public string WinRarPath
{
get
{
return string.IsNullOrEmpty(_winRarPath) ? GetWinRarInstallPath() : _winRarPath;
}
set
{
_winRarPath = value;
}
}
#endregion /// <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)
{
if (IsSetUpWinRar())
{
throw new ArgumentNullException("WinRAR未安装");
}
RunCmd(string.Format("x{0} -o{1} {2} {3}", (password == null ? "" : " -p" + password), (isOverride ? "+" : "-"), rarFilePath, unRarPath));
} /// <summary>
/// 压缩文件或者文件夹为压缩包
/// </summary>
/// <param name="filePath">需要压缩的文件/文件夹全路径</param>
/// <param name="saveFilePath">压缩文件保存全路径</param>
/// <param name="isOverride">是否覆盖</param>
/// <param name="password">压缩文件密码</param>
public void Rar(string filePath, string saveFilePath, bool isOverride = false, string password = null)
{
if (IsSetUpWinRar())
{
throw new ArgumentNullException("WinRAR未安装");
}
RunCmd(string.Format("a{0} -o{1} -ep2 -r {2} {3}", (password == null ? "" : " -p" + password), (isOverride ? "+" : "-"), saveFilePath, filePath));
} /// <summary>
/// 解压是否安装了WinRAR程序
/// </summary>
/// <returns></returns>
public bool IsSetUpWinRar()
{
if (!string.IsNullOrEmpty(WinRarPath))
{
return File.Exists(WinRarPath);
}
var inistallPath = GetWinRarInstallPath();
if (string.IsNullOrEmpty(inistallPath))
{
return false;
}
WinRarPath = inistallPath;
return true;
} /// <summary>
/// 从注册表中获取WinRAR的安装路径
/// </summary>
/// <returns></returns>
public string GetWinRarInstallPath()
{
var openKey = @"SOFTWARE\Wow6432Node\WinRAR";//64位注册表
if (IntPtr.Size == )
{
openKey = @"SOFTWARE\WinRAR";//32位注册表路径
}
RegistryKey appPath = Registry.LocalMachine.OpenSubKey(openKey);
if (appPath != null)
{
// WinRAR安装具体路径
string path = appPath.GetValue("exe32").ToString();
if (File.Exists(path))
{
return path;
}
}
return null;
} /// <summary>
/// 执行rar内部命令
/// </summary>
/// <param name="cmd">要执行的命令</param>
public void RunCmd(string cmd)
{
using (var p = new Process())
{
p.StartInfo.FileName = WinRarPath;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.Arguments = cmd;
p.Start();
p.WaitForExit();
}
}
}
}

WinRarHelper

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

  1. ZipHelper 压缩和解压帮助类

    ZipHelper 压缩和解压帮助类 关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播 ...

  2. 利用c#自带的类对文件进行压缩和解压处理

    在做网络传输文件的小例子的时候,当传输的文件比较大的时候,我们通常都是将文件经过压缩之后才进行传输,以前都是利用第三方插件来对文件进行压缩的,但是现在我发现了c#自带的类库也能够实现文件的压缩,实际上 ...

  3. Linux 时间日期类、搜索查找类、 压缩和解压类指令

    l 时间日期类 date指令-显示当前日期 基本语法 1) date (功能描述:显示当前时间) 2) date +%Y (功能描述:显示当前年份) 3) date +%m (功能描述:显示当前月份) ...

  4. Linux时间日期类,压缩和解压类

    一.时间日期类 1.data指令 1.基本指令 date 显示当前日期 data +%Y 显示当前年份 data +%m 显示当前月份 data +%d 显示当前天 data +%Y-%m-%d %H ...

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

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

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

    用c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容.下面的代码没有把多文件的目录 ...

  7. linux学习之路第七天(压缩和解压类指令详解)

    压缩和解压类 1.gzip/gunzip 指令 gzip 指令用于压缩文件, gunzip用于解压的 基本语法 gzip 文件 (功能描述:压缩文件,指令将文件压缩成*.gz文件) gunzip 文件 ...

  8. linux 实用指令压缩和解压类

    linux 实用指令压缩和解压类 目录 linux 实用指令压缩和解压类 gzip/gunzip指令(不常用) zip/unzip指令 tar指令(常用) gzip/gunzip指令(不常用) 说明 ...

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

    关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播分享,必须保持原作者的信息,但禁止将该 ...

随机推荐

  1. [原]Cachedb 网络模块文档

    Cachedb 网络模块文档 整体结构 多路复用 (epoll 模块) 事件驱动 (事件封装) 缓冲管理 (上层buffer管理) 设计思想 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚 ...

  2. 走进缓存的世界(三) - Memcache

    系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

  3. RMS Server打开或关闭日志记录

    原文: https://technet.microsoft.com/zh-cn/library/cc732758 在 Active Directory Rights Management Servic ...

  4. Android 死锁和重入锁

    死锁的定义: 1.一般的死锁 一般的死锁是指多个线程的执行必须同时拥有多个资源,由于不同的线程需要的资源被不同的线程占用,最终导致僵持的状态,这就是一般死锁的定义. package com.cxt.t ...

  5. ERROR 1300 (HY000): Invalid utf8 character string: ''

    在load csv 进mysql的时候,报这个错,苦恼了很长时间,网上搜索不到答案. mysql>    load data infile '/home/hdh/8_sr/8_45.csv'   ...

  6. Jquery对网页高度、宽度的操作

    Jquery获取网页的宽度.高度 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: doc ...

  7. Alwayson的IP冲突

    Alwayson的IP冲突 https://social.technet.microsoft.com/Forums/office/en-US/4d50cb1c-eef7-4dcc-b937-3c8eb ...

  8. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  9. 【完全开源】知乎日报UWP版(下篇):商店APP、github源码、功能说明。Windows APP 良心出品。

    目录 说明 功能 截图+视频 关于源码和声明 说明 陆陆续续大概花了一个月的时间,APP算是基本完成了.12月份一直在外出差,在出差期间进行了两次功能完善,然后断断续续修补了一些bug,到目前为止,我 ...

  10. Kinect开发文章目录

    整理了一下去年为止到现在写的和翻译的Kinect的相关文章,方便大家查看.另外,最近京东上微软在搞活动, 微软 Kinect for Windows 京东十周年专供礼包 ,如果您想从事Kinect开发 ...