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

WinRAR压缩操作帮助类的更多相关文章

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

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  2. WinRarHelper帮助类

    WinRarHelper帮助类 关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩 ...

  3. 如何用C#+WinRAR 实现压缩 分类:

    前提:必须安装 WinRAR 1. 工具类 using System; using System.Diagnostics; using System.IO; using Microsoft.Win32 ...

  4. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  5. .NET 4.5 中新提供的压缩类

    Windows8 的开发已经如火如荼开始了,在 Windows8 中提供的 .NET Framework 已经更新到了 4.5 版,其中又增加了一些新的特性,对压缩文件的支持就是其中之一. 在 4.5 ...

  6. ASP.NET利用WINRar实现在线解压缩文件

    一.肯定是服务器必须装了winrar这个软件了. 二.创建Helper类,如下: using System; using System.Collections.Generic; using Syste ...

  7. WinRAR安装、破解与去除弹窗广告

    本教程教大家怎么破解WinRAR压缩软件和去除广告(教程属于总结类,总结网上给出的方法,并且亲测有效,非本人原创)WinRAR5.40 2016.10.06 首先下载WinRAR软件,去它的官方英文网 ...

  8. winrar 压缩文件方法

    问题描述: 我要一些大的文件进行压缩,看了网上有很多类拟的写法.但在我这都存在两个问题. 1.就是他们都是通过注册表找到rar的exe目录.我安装好winrar后,虽然注册表有,但那个目录一直报一个错 ...

  9. duilib入门之贴图描述、类html文本描述、动态换肤、Dll插件、资源打包

    转载自duilib入门文档 贴图描述: Duilib的表现力丰富很大程度上得益于贴图描述的简单强大.Duilib的贴图描述分为简单模式和复杂模式两种. 简单模式使用文件名做为贴图描述内容,在这种方式下 ...

随机推荐

  1. 关于javascript自定义对象(来自网络)(最近几天不会的)

    javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...

  2. 14——小心copying行为

    资源的copying行为决定对象的copying行为. 抑制copying行为,使用引用计数.

  3. C语言的基础

    任何事物的运行离不开两个部分,一个部分是"事物",一个部分是"运行",前者是状态,在C语言中表现为常量.变量等,后者是过程,在C语言中表现为语句.函数等. 语言 ...

  4. HttpClient方式模拟http请求

    方式一:HttpClient import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.http.*; im ...

  5. Java复习-oop

    我们可理解“纯粹”的面向对象程序设计方法是什么样的:(1) 所有东西都是对象.可将对象想象成一种新型变量:它保存着数据,但可要求它对自身进行操作.理论上讲,可从要解决的问题身上提出所有概念性的组件,然 ...

  6. UE4 VR 模式画面扭曲 解决方法

    后期处理盒子 详细设置->setting->Misc->screen percentage 设置为100

  7. Android Studio使用教程-菜单(Edit)

    3.2.1.Undo(Ctrl+Z) 撤销上一次操作 3.2.2.Redo(Ctrl+Shift+Z) 退出撤销操作 3.2.3.Cut(Ctrl+X) 剪切 3.2.4.Copy(Ctrl+C) 复 ...

  8. Python实例1

    1.有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 错解: 正解: 源码: #!/usr/bin/python for i in range(1,5): for j in ...

  9. Equls 和==的区别

    对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true.对于 string ...

  10. 《java编程思想》读书笔记 暂停一段时间,改为上面的练习题

    发现个很尴尬的现象.我一天实在看得太快了...全写下 写博客都得一晚上.. 之前因为是第一次看这么厚的书,别人都说很难,以为会看很慢的.然而,已经完全学过Java的 我感觉没啥压力,越看越快....第 ...