本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用)。

先来看WinRAR(WinZip)自身的支持调用命令:

压缩命令:a {0} {1} -r 【{0}:压缩后文件名|{1}:待压缩的文件物理路径】

ex:"a 你妹.rar f:\\MM -r" (含义为将f盘下MM的文件夹压缩为"你妹.rar"文件)

解压命令:x {0} {1} -y 【{0}:待解压文件名称|{1}:待解压文件物理路径】

ex:"x 幺妹.rar f:\\幺妹 -y"(待压缩文件物理路径:"f:\\幺妹\\幺妹.rar")

参数说明

参数

含义

a

添加文件到压缩包

x

以完整路径从压缩包解开压缩

WinZip(WinRAR)调用通用类

using System;using System.Collections.Generic;using System.Text;

//--------------usingusing System.Diagnostics;using Microsoft.Win32;using System.IO;

/// <summary>/// Name:Stone/// DateTime: 2011/12/31 16:39:26/// Description:WinRAR压缩/// </summary>public class WinRARCSharp{    // WinRAR安装注册表key    private const string WinRAR_KEY = @"WinRAR.ZIP\shell\open\command";

    /// <summary>    /// 利用 WinRAR 进行压缩    /// </summary>    /// <param name="path">将要被压缩的文件夹(绝对路径)</param>    /// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>    /// <param name="rarName">压缩文件的名称(包括后缀)</param>    /// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>    public bool RAR(string path, string rarPath, string rarName)    {        bool flag = false;        string rarexe;       //WinRAR.exe 的完整路径        RegistryKey regkey;  //注册表键        Object regvalue;     //键值        string cmd;          //WinRAR 命令参数        ProcessStartInfo startinfo;        Process process;        try        {            regkey = Registry.ClassesRoot.OpenSubKey(WinRAR_KEY);            regvalue = regkey.GetValue("");  // 键值为 "d:\Program Files\WinRAR\WinRAR.exe" "%1"            rarexe = regvalue.ToString();            regkey.Close();            rarexe = rarexe.Substring(1, rarexe.Length - 7);  // d:\Program Files\WinRAR\WinRAR.exe

            Directory.CreateDirectory(path);            //压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)            cmd = string.Format("a {0} {1} -r",                                rarName,                                path);            startinfo = new ProcessStartInfo();            startinfo.FileName = rarexe;            startinfo.Arguments = cmd;                          //设置命令参数            startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口

            startinfo.WorkingDirectory = rarPath;            process = new Process();            process.StartInfo = startinfo;            process.Start();            process.WaitForExit(); //无限期等待进程 winrar.exe 退出            if (process.HasExited)            {                flag = true;            }            process.Close();        }        catch (Exception e)        {            throw e;        }        return flag;    }    /// <summary>    /// 利用 WinRAR 进行解压缩    /// </summary>    /// <param name="path">文件解压路径(绝对)</param>    /// <param name="rarPath">将要解压缩的 .rar 文件的存放目录(绝对路径)</param>    /// <param name="rarName">将要解压缩的 .rar 文件名(包括后缀)</param>    /// <returns>true 或 false。解压缩成功返回 true,反之,false。</returns>    public bool UnRAR(string path, string rarPath, string rarName)    {        bool flag = false;        string rarexe;        RegistryKey regkey;        Object regvalue;        string cmd;        ProcessStartInfo startinfo;        Process process;        try        {            regkey = Registry.ClassesRoot.OpenSubKey(WinRAR_KEY);            regvalue = regkey.GetValue("");            rarexe = regvalue.ToString();            regkey.Close();            rarexe = rarexe.Substring(1, rarexe.Length - 7);

            Directory.CreateDirectory(path);            //解压缩命令,相当于在要压缩文件(rarName)上点右键->WinRAR->解压到当前文件夹            cmd = string.Format("x {0} {1} -y",                                rarName,                                path);            startinfo = new ProcessStartInfo();            startinfo.FileName = rarexe;            startinfo.Arguments = cmd;            startinfo.WindowStyle = ProcessWindowStyle.Hidden;

            startinfo.WorkingDirectory = rarPath;            process = new Process();            process.StartInfo = startinfo;            process.Start();            process.WaitForExit();            if (process.HasExited)            {                flag = true;            }            process.Close();        }        catch (Exception e)        {            throw e;        }        return flag;    }}

调用方法

WinRARCSharp win = new WinRARCSharp();

win.RAR("F:\\aaa\\", "f:\\", "a.rar"); // 压缩(将“f:\\aaa\\”目录文件压缩到“f:\\a.rar”)

win.UnRAR("f:\\呦M.zip", "f:\\MM", "GG"); // 解压(将“f:\\呦M.zip”解压到“f:\\MM\\GG”目录下)

7z压缩通用类:

using System;using System.Collections.Generic;using System.Text;

using Microsoft.Win32;using System.Diagnostics;using System.IO;

/// <summary>/// Name:Stone/// DateTime: 2012/1/4 16:26:08/// Description:7Z解压管理类/// </summary>public class _7zRAR{

    // 7z.exe 安装地址    private const string _7zEXE = @"D:\Program Files (x86)\7-Zip\7z.exe";

    /// <summary>    /// 利用 7zExE 进行压缩    /// </summary>    /// <param name="_7zPath">将要被压缩的文件夹(物理路径)</param>    /// <param name="filePath">压缩后的的存放目录(物理路径)</param>    /// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>    public static bool Un7zRAR(string _7zPath, string filePath)    {        bool flag = false;

        string cmd;        ProcessStartInfo startinfo;        Process process;        try        {            cmd = String.Format(@"x {0} -o{1} -y",                _7zPath, filePath);            startinfo = new ProcessStartInfo();            startinfo.FileName = _7zEXE;            startinfo.Arguments = cmd;            startinfo.WindowStyle = ProcessWindowStyle.Hidden;

            process = new Process();            process.StartInfo = startinfo;            process.Start();            process.WaitForExit();            if (process.HasExited)            {                flag = true;            }            process.Close();        }        catch (Exception e)        {            throw e;        }        return flag;    }}

=============《完》===================
转载请写明出处:http://www.cnblogs.com/stone_w/archive/2012/01/04/2312294.html

WinRAR(WinZip)压缩与解压实现(C#版Window平台)相关推荐

  1. WinZip 6 for Mac(压缩压解工具)

    还在寻找一款强大的压缩压解工具吗?小编为大家带来了WinZip Mac 激活版.WinZip Mac版是Mac平台上一款非常著名的压缩解压工具,您可以使用它对7Z.JAR.Zip.Zipx.RAR等多 ...

  2. c# rar解压大小_C#利用WinRAR实现压缩和解压缩

    usingSystem;usingMicrosoft.Win32;usingSystem.Diagnostics;usingSystem.IO;namespaceMSCL {/// ///压缩解压类/ ...

  3. 【类似于windows的WinRAR软件】MacOS电脑好用的压缩、解压软件都有哪些?【推荐Keka】

    参考:Mac电脑好用的压缩.解压软件都有哪些?_ITPUB博客 1.[免费强大]Keka for Mac(压缩解压工具)中文 [使用7z格式压缩,可以加密文件名---和winrar一样可以加密文件名] ...

  4. winrar 免费压缩解压工具

    为什么80%的码农都做不了架构师?>>>    winrar 免费压缩解压工具官网http://www.rarlab.com/download.htm不要下载中国 代理的,代理的有广 ...

  5. Java递归解压缩Zip、7z、7zx、Rar5(使用winrar.exe)可解压这四种类型的嵌套压缩

    Java递归解压缩Zip.7z.7zx.Rar5(使用winrar.exe)可解压这四种类型的嵌套压缩 依赖 Zip 7z Rar 说明 代码(复制即可用) 依赖 Zip 官方自带,无需额外操作 7z ...

  6. winRAR真难用,我决定自创一个(炼虚期) 文件的压缩与解压 将色色一网打尽

      炼虚期简介 炼虚期主要阐述的是文件的压缩与解压的IO操作 提供完整代码,代码在筑基期中    博主空间https://blog.csdn.net/JOElib?spm=1011.2266.3001 ...

  7. windows winrar 指令_【转】winrar命令行详解

    从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下: WinRAR  - - 命令:WinRAR 运行的字符组合代表功能 开关:切换操作指定类型,压缩强度,压缩文件类型,等等的定义. 压 ...

  8. 下载c语言软件后怎么解压,手机怎么解压文件 盘点常用手机压缩打包解压文件应用...

    手机现在是我们必不可少的工具,在下载应用的时候,众多网站已经把安装文件独立好了等我们去下载,但是如果你要把文件打包或者下载了网络上已经被打包压缩好的文件需要解压缩的时候,就会觉得很麻烦了,手机上可没有 ...

  9. java tar.gz 格式多文件打包压缩与解压

    问题背景:开发中,我们时常会遇到对文件进行存储或传输的问题,但如果传输储存的文件较大,浪费磁盘空间不说,还会大大影响程序运行效率.于是便引出了这篇文章的主题,关于文件打包与压缩的问题.这里" ...

最新文章

  1. Oracle 常用查询
  2. Silverlight Image Source URI 加反斜杠引和不加的区别
  3. Vista开发之旅:微软开发技术20年回顾
  4. C++_引用_引用的基本语法_注意事项_引用做函数参数---C++语言工作笔记031
  5. LA 3882 And Then There Was One
  6. 最强android平板,最强安卓平板!华为MatePad Pro来了:搭载麒麟990
  7. ClickHouse在字节跳动推荐和广告业务部门的最佳实践
  8. java+mysql中文乱码解决
  9. 零基础学python实战-苦苦发愁学习Python?让你享受 7天 掌握Python的感觉
  10. 百度面试题:从海量日志中提取访问百度次数最多的IP
  11. linux查找当前目录下所有子目录特定文件类型
  12. linux dstat 多 cpu,dstat 用法总结
  13. BtTracker原理
  14. 第三集 怪物学院 第十八章
  15. [句子成分] 四、状语 定语 同位语
  16. 【情书加密】,c++花式表白,这样泡小师妹,没跑了。
  17. Docker配置Daocloud加速器
  18. mysql 判断时间是否当天_MySQL 获取当天日期
  19. 转移到ios下载安卓_转移到ios下载-转移到IOS 安卓版v2.10.0-PC6安卓网
  20. 值得期待!中兴新支点4G多卡聚合技术将融合到新型导播机

热门文章

  1. oracle命令行安装
  2. 权限组件(6):权限分配的角色管理
  3. Ubuntu 忘记密码的处理方法
  4. mysql 包含的那些文件
  5. Virtualbox中win7虚拟机中U盘不可用问题的解决
  6. PHP多进程处理并行处理任务实例
  7. 如何在路由器的局域网下使用IIS发布网页
  8. 【OSChina-MoPaaS应用开发大赛】豪美创新后台业务管理系统
  9. DIV相对于父DIV底部对齐的实现方法-Div+CSS教程
  10. 伪代码书写规范_C++代码书写规范(推荐新手程序员)