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(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"); 23 //RegistryKey regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command"); 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 }