如下方法實現了.rar的壓縮與解壓縮,代碼如下:
using Microsoft.Win32;<br />using System.Diagnostics;</p><p>/// <summary><br /> /// 利用 WinRAR 進行壓縮<br /> /// </summary><br /> /// <param name="path">將要被壓縮的檔案夾(絕對路徑)</param><br /> /// <param name="rarPath">壓縮後的 .rar 的存放目錄(絕對路徑)</param><br /> /// <param name="rarName">壓縮檔的名稱(包括尾碼)</param><br /> /// <returns>true 或 false。壓縮成功返回 true,反之,false。</returns><br /> public bool RAR(string path, string rarPath, string rarName)<br /> {<br /> bool flag = false;<br /> string rarexe; //WinRAR.exe 的完整路徑<br /> RegistryKey regkey; //註冊表鍵<br /> Object regvalue; //索引值<br /> string cmd; //WinRAR 命令參數<br /> ProcessStartInfo startinfo;<br /> Process process;<br /> try<br /> {<br /> regkey = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRAR.exe/shell/open/command");<br /> regvalue = regkey.GetValue(""); // 索引值為 "d:/Program Files/WinRAR/WinRAR.exe" "%1"<br /> rarexe = regvalue.ToString();<br /> regkey.Close();<br /> rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:/Program Files/WinRAR/WinRAR.exe</p><p> Directory.CreateDirectory(path);<br /> //壓縮命令,相當於在要壓縮的檔案夾(path)上點右鍵->WinRAR->添加到壓縮檔->輸入壓縮檔名(rarName)<br /> cmd = string.Format("a {0} {1} -r",<br /> rarName,<br /> path);<br /> startinfo = new ProcessStartInfo();<br /> startinfo.FileName = rarexe;<br /> startinfo.Arguments = cmd; //設定命令參數<br /> startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隱藏 WinRAR 視窗</p><p> startinfo.WorkingDirectory = rarPath;<br /> process = new Process();<br /> process.StartInfo = startinfo;<br /> process.Start();<br /> process.WaitForExit(); //無限期等待進程 winrar.exe 退出<br /> if (process.HasExited)<br /> {<br /> flag = true;<br /> }<br /> process.Close();<br /> }<br /> catch (Exception e)<br /> {<br /> throw e;<br /> }<br /> return flag;<br /> }<br /> /// <summary><br /> /// 利用 WinRAR 進行解壓縮<br /> /// </summary><br /> /// <param name="path">檔案解壓路徑(絕對)</param><br /> /// <param name="rarPath">將要解壓縮的 .rar 檔案的存放目錄(絕對路徑)</param><br /> /// <param name="rarName">將要解壓縮的 .rar 檔案名稱(包括尾碼)</param><br /> /// <returns>true 或 false。解壓縮成功返回 true,反之,false。</returns><br /> public bool UnRAR(string path, string rarPath, string rarName)<br /> {<br /> bool flag = false;<br /> string rarexe;<br /> RegistryKey regkey;<br /> Object regvalue;<br /> string cmd;<br /> ProcessStartInfo startinfo;<br /> Process process;<br /> try<br /> {<br /> regkey = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRAR.exe/shell/open/command");<br /> regvalue = regkey.GetValue("");<br /> rarexe = regvalue.ToString();<br /> regkey.Close();<br /> rarexe = rarexe.Substring(1, rarexe.Length - 7);</p><p> Directory.CreateDirectory(path);<br /> //解壓縮命令,相當於在要壓縮檔(rarName)上點右鍵->WinRAR->解壓到當前檔案夾<br /> cmd = string.Format("x {0} {1} -y",<br /> rarName,<br /> path);<br /> startinfo = new ProcessStartInfo();<br /> startinfo.FileName = rarexe;<br /> startinfo.Arguments = cmd;<br /> startinfo.WindowStyle = ProcessWindowStyle.Hidden;</p><p> startinfo.WorkingDirectory = rarPath;<br /> process = new Process();<br /> process.StartInfo = startinfo;<br /> process.Start();<br /> process.WaitForExit();<br /> if (process.HasExited)<br /> {<br /> flag = true;<br /> }<br /> process.Close();<br /> }<br /> catch (Exception e)<br /> {<br /> throw e;<br /> }<br /> return flag;<br /> }<br />
昨天又看了下,發現如果路徑中有空格(如:D:/Program Files/)的話壓縮解壓就會出現問題,折磨了我很長時間,最後實在沒辦法了就在cmd裡面試了半天,發現在有空格的路徑上加雙引號就可以了。在代碼裡Directory.CreateDirectory(path);後面把 path 和 rarName 都判斷一下如果有空格,就加上 path = "/"" + path + "/"";
RAR參數:
一、壓縮命令
1、將temp.txt壓縮為temp.rarrar a temp.rar temp.txt
2、將目前的目錄下所有檔案壓縮到temp.rarrar a temp.rar *.*
3、將目前的目錄下所有檔案及其所有子目錄壓縮到temp.rarrar a temp.rar *.* -r
4、將目前的目錄下所有檔案及其所有子目錄壓縮到temp.rar,並加上密碼123rar a temp.rar *.* -r -p123
二、解壓命令
1、將temp.rar解壓到c:/temp目錄rar e temp.rar c:/temprar e *.rar c:/temp(支援大量操作)
2、將temp.rar解壓到c:/temp目錄,並且解壓後的目錄結構和temp.rar中的目錄結構一
壓縮目錄test及其子目錄的檔案內容
Wzzip test.zip test -r -P
WINRAR A test.rar test -r
刪除壓縮包中的*.txt檔案
Wzzip test.zip *.txt -d
WinRAR d test.rar *.txt
重新整理壓縮包中的檔案,即添加已經存在於壓縮包中但更新的檔案
Wzzip test.zip test -f
Winrar f test.rar test
更新壓縮包中的檔案,即添加已經存在於壓縮包中但更新的檔案以及新檔案
Wzzip test.zip test -u
Winrar u test.rar test
移動檔案到壓縮包,即添加檔案到壓縮包後再刪除被壓縮的檔案
Wzzip test.zip -r -P -m
Winrar m test.rar test -r
添加全部 *.exe 檔到壓縮檔,但排除有 a或b
開頭名稱的檔案
Wzzip test *.exe -xf*.* -xb*.*
WinRAR a test *.exe -xf*.* -xb*.*
加密碼進行壓縮
Wzzip test.zip test
-s123。注意密碼是大小寫敏感的。在圖形介面下開啟帶密碼的壓縮檔,會看到+號標記(附圖1)。
WINRAR A test.rar test -p123
-r。注意密碼是大小寫敏感的。在圖形介面下開啟帶密碼的壓縮檔,會看到*號標記(附圖2)。
按名字排序、以簡要方式列表顯示壓縮包檔案
Wzzip test.zip -vbn
Rar l test.rar
鎖定壓縮包,即防止未來對壓縮包的任何修改
無對應命令
Winrar k test.rar
建立360kb大小的分卷壓縮包
無對應命令
Winrar a -v360 test
帶子目錄資訊解壓縮檔案
Wzunzip test -d
Winrar x test -r
不帶子目錄資訊解壓縮檔案
Wzunzip test
Winrar e test
解壓縮檔案到指定目錄,如果目錄不存在,自動建立
Wzunzip test newfolder
Winrar x test newfolder
解壓縮檔案並確認覆蓋檔案
Wzunzip test -y
Winrar x test -y
解壓縮特定檔案
Wzunzip test *.txt
Winrar x test *.txt
解壓縮現有檔案的更新檔案
Wzunzip test -f
Winrar x test -f
解壓縮現有檔案的更新檔案及新檔案
Wzunzip test -n
Winrar x test -u
批量解壓縮檔案
Wzunzip *.zip
WinRAR e *.rar