【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货
2016-05-15 12:35
691 查看
关于本文档的说明
本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件/article/11913859.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有没有安装。
//------------------------------------------------------------------------------------- // 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 == 4) { 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
相关文章推荐
- leetcode 343: Integer Break(C#版)
- c# 如何获取项目的根目录
- leetcode 344: Reverse String (c#版)
- C#反射Assembly 详细说明
- C#中防止程序多次运行
- C#技术分享【Word转换成图片和PDF——2种方案】
- C# 非静态类和静态类
- C#读书雷达 | TW洞见
- C#调用百度地图API入门&解决BMap未定义问题
- c# XML和实体类之间相互转换(序列化和反序列化)
- C#开发 植物大战僵尸 修改阳光值 源码无私分享
- C#多线程开发,简单示例
- C#进程管理,简单示例
- C#多线程开发,简单示例-字符串并发处理
- C#异常处理机制
- C# 关于判断字符串为空的一些方法
- C#.NET MVC 枚举转dictionary自动装载生成下拉框
- c/s模式 (C#)下Ftp的多文件上传及其上传进度
- C#路径/文件/目录/I/O常见操作汇总
- C# 利用反射动态将字符串转换成属性对应的类型值