• c#调用WinRAR软件压缩和解压文件


      1 using System;
      2 using System.Collections.Generic;
      3 using System.Web;
      4 using System.IO;
      5 using System.Linq;
      6 using System.IO.Compression;
      7 using System.Text;
      8 using System.Collections;
      9 using System.Diagnostics;
     10 using Microsoft.Win32;
     11 
     12 namespace RarHelper
     13 {
     14     public class RARClass
     15     {
     16         /// <summary>  
     17         /// 获取WinRAR.exe路径  
     18         /// </summary>  
     19         /// <returns>为空则表示未安装WinRAR</returns>  
     20         public static string ExistsRAR()
     21         {
     22             RegistryKey regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionApp PathsWinRAR.exe");
     23             //RegistryKey regkey = Registry.ClassesRoot.OpenSubKey(@"ApplicationsWinRAR.exeshellopencommand");  
     24             string strkey = regkey.GetValue("").ToString();
     25             regkey.Close();
     26             //return strkey.Substring(1, strkey.Length - 7);  
     27             return strkey;
     28         }
     29 
     30         /// <summary>  
     31         /// 解压RAR文件  
     32         /// </summary>  
     33         /// <param name="rarFilePath">要解压的文件路径</param>  
     34         /// <param name="unrarDestPath">解压路径(绝对路径)</param>  
     35         public static void UnRAR(string rarFilePath, string unrarDestPath)
     36         {
     37             string rarexe = ExistsRAR();
     38             if (String.IsNullOrEmpty(rarexe))
     39             {
     40                 throw new Exception("未安装WinRAR程序。");
     41             }
     42             try
     43             {
     44                 //组合出需要shell的完整格式  
     45                 string shellArguments = string.Format("x -o+ "{0}" "{1}\"", rarFilePath, unrarDestPath);
     46 
     47                 //用Process调用  
     48                 using (Process unrar = new Process())
     49                 {
     50                     ProcessStartInfo startinfo = new ProcessStartInfo();
     51                     startinfo.FileName = rarexe;
     52                     startinfo.Arguments = shellArguments;               //设置命令参数  
     53                     startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口  
     54 
     55                     unrar.StartInfo = startinfo;
     56                     unrar.Start();
     57                     unrar.WaitForExit();//等待解压完成  
     58 
     59                     unrar.Close();
     60                 }
     61             }
     62             catch
     63             {
     64                 throw;
     65             }
     66         }
     67 
     68         /// <summary>  
     69         ///  压缩为RAR文件  
     70         /// </summary>  
     71         /// <param name="filePath">要压缩的文件路径(绝对路径)</param>  
     72         /// <param name="rarfilePath">压缩到的路径(绝对路径)</param>  
     73         public static void RAR(string filePath, string rarfilePath, string otherPara = "")
     74         {
     75             RAR(filePath, rarfilePath, "", "", otherPara);
     76         }
     77 
     78         /// <summary>  
     79         ///  压缩为RAR文件  
     80         /// </summary>  
     81         /// <param name="filePath">要压缩的文件路径(绝对路径)</param>  
     82         /// <param name="rarfilePath">压缩到的路径(绝对路径)</param>  
     83         /// <param name="rarName">压缩后压缩包名称</param>  
     84         public static void RAR(string filePath, string rarfilePath, string rarName, string otherPara = "")
     85         {
     86             RAR(filePath, rarfilePath, "", rarName, otherPara);
     87         }
     88 
     89         /// <summary>  
     90         ///  压缩为RAR文件  
     91         /// </summary>  
     92         /// <param name="filePath">要压缩的文件路径(绝对路径)</param>  
     93         /// <param name="rarfilePath">压缩到的路径(绝对路径)</param>  
     94         /// <param name="rarName">压缩后压缩包名称</param>  
     95         /// <param name="password">解压密钥</param>  
     96         public static void RAR(string filePath, string rarfilePath, string password, string rarName, string otherPara = "")
     97         {
     98             string rarexe = ExistsRAR();
     99             if (String.IsNullOrEmpty(rarexe))
    100             {
    101                 throw new Exception("未安装WinRAR程序。");
    102             }
    103 
    104             if (!Directory.Exists(filePath))
    105             {
    106                 //throw new Exception("文件不存在!");  
    107             }
    108 
    109             if (String.IsNullOrEmpty(rarName))
    110             {
    111                 rarName = Path.GetFileNameWithoutExtension(filePath) + ".rar";
    112             }
    113             else
    114             {
    115                 if (Path.GetExtension(rarName).ToLower() != ".rar")
    116                 {
    117                     rarName += ".rar";
    118                 }
    119             }
    120 
    121             try
    122             {
    123                 //Directory.CreateDirectory(rarfilePath);  
    124                 //压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)  
    125                 string shellArguments;
    126                 if (String.IsNullOrEmpty(password))
    127                 {
    128                     shellArguments = string.Format("a -ep1 "{0}" "{1}" -r", rarName, filePath);
    129                 }
    130                 else
    131                 {
    132                     shellArguments = string.Format("a -ep1 "{0}" "{1}" -r -p"{2}"", rarName, filePath, password);
    133                 }
    134                 if (!string.IsNullOrEmpty(otherPara))
    135                 {
    136                     shellArguments = shellArguments + " " + otherPara;
    137                 }
    138 
    139                 using (Process rar = new Process())
    140                 {
    141                     ProcessStartInfo startinfo = new ProcessStartInfo();
    142                     startinfo.FileName = rarexe;
    143                     startinfo.Arguments = shellArguments;               //设置命令参数  
    144                     startinfo.WindowStyle = ProcessWindowStyle.Hidden;  //隐藏 WinRAR 窗口  
    145                     startinfo.WorkingDirectory = rarfilePath;
    146 
    147                     rar.StartInfo = startinfo;
    148                     rar.Start();
    149                     rar.WaitForExit(); //无限期等待进程 winrar.exe 退出  
    150                     rar.Close();
    151                 }
    152             }
    153             catch
    154             {
    155                 throw;
    156             }
    157         }
    158 
    159     }  
    160 }
  • 相关阅读:
    ssh密钥讲解
    Python之paramiko模块
    Python之socket编程进阶版
    linux内socket服务器无法连接windows
    Python之socket编程
    linux(centOS7,mini),python环境的搭建
    Python 之异常处理机制
    pytho常用模块2——random
    Hadoop基础(二):从Hadoop框架讨论大数据生态
    Hadoop基础(一):概论
  • 原文地址:https://www.cnblogs.com/lyd2016/p/5964687.html
一二三 - 开发者的网上家园