using System;
using System.Collections.Generic;
using System.Web;
using System.IO;
using System.Linq;
using System.IO.Compression;
using System.Text;
using System.Collections;
using System.Diagnostics;
using Microsoft.Win32; namespace RarHelper
{
public class RARClass
{
/// <summary>
/// 获取WinRAR.exe路径
/// </summary>
/// <returns>为空则表示未安装WinRAR</returns>
public static string ExistsRAR()
{
RegistryKey regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
//RegistryKey regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
string strkey = regkey.GetValue("").ToString();
regkey.Close();
//return strkey.Substring(1, strkey.Length - 7);
return strkey;
} /// <summary>
/// 解压RAR文件
/// </summary>
/// <param name="rarFilePath">要解压的文件路径</param>
/// <param name="unrarDestPath">解压路径(绝对路径)</param>
public static void UnRAR(string rarFilePath, string unrarDestPath)
{
string rarexe = ExistsRAR();
if (String.IsNullOrEmpty(rarexe))
{
throw new Exception("未安装WinRAR程序。");
}
try
{
//组合出需要shell的完整格式
string shellArguments = string.Format("x -o+ \"{0}\" \"{1}\\\"", rarFilePath, unrarDestPath); //用Process调用
using (Process unrar = new Process())
{
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = rarexe;
startinfo.Arguments = shellArguments; //设置命令参数
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 WinRAR 窗口 unrar.StartInfo = startinfo;
unrar.Start();
unrar.WaitForExit();//等待解压完成 unrar.Close();
}
}
catch
{
throw;
}
} /// <summary>
/// 压缩为RAR文件
/// </summary>
/// <param name="filePath">要压缩的文件路径(绝对路径)</param>
/// <param name="rarfilePath">压缩到的路径(绝对路径)</param>
public static void RAR(string filePath, string rarfilePath, string otherPara = "")
{
RAR(filePath, rarfilePath, "", "", otherPara);
} /// <summary>
/// 压缩为RAR文件
/// </summary>
/// <param name="filePath">要压缩的文件路径(绝对路径)</param>
/// <param name="rarfilePath">压缩到的路径(绝对路径)</param>
/// <param name="rarName">压缩后压缩包名称</param>
public static void RAR(string filePath, string rarfilePath, string rarName, string otherPara = "")
{
RAR(filePath, rarfilePath, "", rarName, otherPara);
} /// <summary>
/// 压缩为RAR文件
/// </summary>
/// <param name="filePath">要压缩的文件路径(绝对路径)</param>
/// <param name="rarfilePath">压缩到的路径(绝对路径)</param>
/// <param name="rarName">压缩后压缩包名称</param>
/// <param name="password">解压密钥</param>
public static void RAR(string filePath, string rarfilePath, string password, string rarName, string otherPara = "")
{
string rarexe = ExistsRAR();
if (String.IsNullOrEmpty(rarexe))
{
throw new Exception("未安装WinRAR程序。");
} if (!Directory.Exists(filePath))
{
//throw new Exception("文件不存在!");
} if (String.IsNullOrEmpty(rarName))
{
rarName = Path.GetFileNameWithoutExtension(filePath) + ".rar";
}
else
{
if (Path.GetExtension(rarName).ToLower() != ".rar")
{
rarName += ".rar";
}
} try
{
//Directory.CreateDirectory(rarfilePath);
//压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
string shellArguments;
if (String.IsNullOrEmpty(password))
{
shellArguments = string.Format("a -ep1 \"{0}\" \"{1}\" -r", rarName, filePath);
}
else
{
shellArguments = string.Format("a -ep1 \"{0}\" \"{1}\" -r -p\"{2}\"", rarName, filePath, password);
}
if (!string.IsNullOrEmpty(otherPara))
{
shellArguments = shellArguments + " " + otherPara;
} using (Process rar = new Process())
{
ProcessStartInfo startinfo = new ProcessStartInfo();
startinfo.FileName = rarexe;
startinfo.Arguments = shellArguments; //设置命令参数
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 WinRAR 窗口
startinfo.WorkingDirectory = rarfilePath; rar.StartInfo = startinfo;
rar.Start();
rar.WaitForExit(); //无限期等待进程 winrar.exe 退出
rar.Close();
}
}
catch
{
throw;
}
} }
}

c#调用WinRAR软件压缩和解压文件的更多相关文章

  1. C#压缩和解压文件

    这里用两种方法实现C#压缩和解压文件 1.使用System.IO.Compression名称空间下的相关类(需引用 System.IO.Compression.FileSystem和System.IO ...

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

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

  3. C# 压缩和解压文件(SharpZipLib)

    先从网上下载ICSharpCode.SharpZipLib.dll类库 将文件或文件夹压缩为zip,函数如下 /// <summary> /// 压缩文件 /// </summary ...

  4. 压缩和解压文件:tar gzip bzip2 compress(转)

    tar[必要参数][选择参数][文件] 压缩:tar -czvf filename.tar.gz targetfile解压:tar -zxvf filename.tar.gz参数说明: -c 建立新的 ...

  5. linux 压缩和解压文件

    一.压缩:20120715文件下面所有的文件 如下: tar -zcvf 20120715.tar.gz  20120715* 二.解压20120715.tar.gz压缩包 如下: tar -xzvf ...

  6. 使用GZipStream压缩和解压文件

    最近做了一个用.NET里的GZipStream压缩解压缩gzip文件的小程序. GZipStream在System.IO.Compression底下,使用起来也很简单.虽然GZipStream是Str ...

  7. linux压缩和解压文件命令

    tar  解包:tar zxvf filename.tar  打包:tar czvf filename.tar dirnamegz命令  解压1:gunzip filename.gz  解压2:gzi ...

  8. Android_JarZip压缩和解压文件

        本文资料来自<android开发权威指南> AndroidSDK中提供了java.util.jar和java.util.zip包中的若干类和接口来完成. 压缩文件基本步骤: 1.创 ...

  9. metro压缩和解压文件

    在1.zip中增加一张新图片StorageFile jpg = await KnownFolders.PicturesLibrary.GetFileAsync("1.jpg"); ...

随机推荐

  1. JUnit--BeforeClass、AfterClass、Before、After示例

    JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍@Before:初始化方法@After:释放资源@Test:测试方法, ...

  2. 一篇好文档,请Thymeleaf Layout Dialect

    Thymeleaf Layout Dialect https://ultraq.github.io/thymeleaf-layout-dialect/ This will introduce the  ...

  3. [BZOJ1260][CQOI2007]涂色paint 区间dp

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1575  Solved: 955 [Submit][S ...

  4. J.U.C并发框架源码阅读(十一)DelayQueue

    基于版本jdk1.7.0_80 java.util.concurrent.DelayQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is su ...

  5. Python与数据库[2] -> 关系对象映射/ORM[4] -> sqlalchemy 的显式 ORM 访问方式

    sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...

  6. App保持登录状态的常用方法(转)

    我们在使用App时,一次登录后App如果不主动退出登录或者清除数据,App会在很长一段时间内保持登录状态,或者让用户感觉到登录一次就不用每次都输入用户密码才能进行登录.银行.金融涉及到支付类的App一 ...

  7. Dfs+Spfa【p1606】[USACO07FEB]荷叶塘Lilypad Pond

    Description 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令人惊讶的莲花,还有一些格子是岩石,其余的只是 ...

  8. 后门构建工具Backdoor Factory

    后门构建工具Backdoor Factory   在渗透测试中,后门程序帮助渗透测试人员在目标机器上执行各种预期的操作.例如,它可以建立从目标主机到攻击机的网络连接,方便渗透测试人员控制目标主机.Ka ...

  9. 将一个txt里的A和B谈话内容获取出来并分别保存到A和B的txt文件中

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream;import java.io.Fi ...

  10. hdu 1556 Color the ball 线段树

    题目链接:HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气 ...