博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)c#实现WinRAR解压缩
阅读量:7082 次
发布时间:2019-06-28

本文共 5327 字,大约阅读时间需要 17 分钟。

本文的原理是借助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; /// /// Name:Stone /// DateTime: 2011/12/31 16:39:26 /// Description:WinRAR压缩 /// public class WinRARCSharp {     // WinRAR安装注册表key    private const string WinRAR_KEY = @"WinRAR.ZIP\shell\open\command"; /// /// 利用 WinRAR 进行压缩     /// /// 将要被压缩的文件夹(绝对路径)/// 压缩后的 .rar 的存放目录(绝对路径)/// 压缩文件的名称(包括后缀)/// 
true 或 false。压缩成功返回 true,反之,false。
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; } /// /// 利用 WinRAR 进行解压缩 /// /// 文件解压路径(绝对)/// 将要解压缩的 .rar 文件的存放目录(绝对路径)/// 将要解压缩的 .rar 文件名(包括后缀)///
true 或 false。解压缩成功返回 true,反之,false。
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压缩通用类

按 Ctrl+C 复制代码
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; } }
按 Ctrl+C 复制代码

转载地址:http://mgoml.baihongyu.com/

你可能感兴趣的文章
清除旧版本kernel[Fedora/CentOS/RHEL]
查看>>
php_ldap.dll扩展加载
查看>>
Hadoop-2.0命令手册
查看>>
高级装配小笔记--环境与profile
查看>>
Java 只有传值
查看>>
Jenkins部署Web项目到远程tomcat
查看>>
在线支付资料
查看>>
iMatrix6.0.0功能更新说明
查看>>
js 中的 Data() 对象
查看>>
发送字符与字符串v
查看>>
在局域网部署git
查看>>
百度外卖面试记录
查看>>
IOS开发网络第一天之02NSThread的基本使用
查看>>
静态页面时用js获取后台信息
查看>>
解决linux环境下,atom编辑器不支持中文的问题
查看>>
pyspider爬虫学习-文档翻译-Frequently-Asked-Questions.md
查看>>
小众时代的定制服务器来临了么
查看>>
IPv4/IPv6 socket
查看>>
#pragma once与#ifndef #define ...#endif的区别
查看>>
模拟复数及其运算
查看>>