本文實例講述了C#實現rar壓縮與解壓縮文件的方法。分享給大家供大家參考。具體分析如下:
此程序利用 WinRAR 程序對文件進行壓縮,命令行語法可參考WinRAR中文幫助。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 /// 利用 WinRAR 進行壓縮 /// </summary> /// <param name="path">將要被壓縮的文件夾(絕對路徑)</param> /// <param name="rarPath">壓縮後的 .rar 的存放目錄(絕對路徑)</param> /// <param name="rarName">壓縮文件的名稱(包括後綴)</param> /// <returns>true 或 false。壓縮成功返回 true,反之,false。</returns> 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(@"ApplicationsWinRAR.exeshellopencommand"); regvalue = regkey.GetValue(""); // 鍵值為 "d:Program FilesWinRARWinRAR.exe" "%1" rarexe = regvalue.ToString(); regkey.Close(); rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:Program FilesWinRARWinRAR.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; } /// <summary> /// 利用 WinRAR 進行解壓縮 /// </summary> /// <param name="path">文件解壓路徑(絕對)</param> /// <param name="rarPath">將要解壓縮的 .rar 文件的存放目錄(絕對路徑)</param> /// <param name="rarName">將要解壓縮的 .rar 文件名(包括後綴)</param> /// <returns>true 或 false。解壓縮成功返回 true,反之,false。</returns> 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(@"ApplicationsWinRAR.exeshellopencommand"); 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; } /// <summary> /// 利用 WinRAR 進行壓縮 /// </summary> /// <param name="path">將要被壓縮的文件夾(絕對路徑)</param> /// <param name="rarPath">壓縮後的 .rar 的存放目錄(絕對路徑)</param> /// <param name="rarName">壓縮文件的名稱(包括後綴)</param> /// <returns>true 或 false。壓縮成功返回 true,反之,false。</returns> 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(@"ApplicationsWinRAR.exeshellopencommand"); regvalue = regkey.GetValue(""); // 鍵值為 "d:Program FilesWinRARWinRAR.exe" "%1" rarexe = regvalue.ToString(); regkey.Close(); rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:Program FilesWinRARWinRAR.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; } /// <summary> /// 利用 WinRAR 進行解壓縮 /// </summary> /// <param name="path">文件解壓路徑(絕對)</param> /// <param name="rarPath">將要解壓縮的 .rar 文件的存放目錄(絕對路徑)</param> /// <param name="rarName">將要解壓縮的 .rar 文件名(包括後綴)</param> /// <returns>true 或 false。解壓縮成功返回 true,反之,false。</returns> 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(@"ApplicationsWinRAR.exeshellopencommand"); 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; }在dos或者cmd下用cd命令進入到winrar的安裝目錄後,輸入unrar可出來以下提示:
用法: unrar < 命令> -<開關 1> -<開關 N> <壓縮文件> <文件...>
<@ 列表文件...> <解壓路徑>
<命令>
e 解壓壓縮文件到當前目錄
l[t,b] 列出壓縮文件[技術信息,簡潔]
p 打印文件到標准輸出設備
t 測試壓縮文件
v[t,b] 詳細列出壓縮文件[技術信息,簡潔]
x 用絕對路徑解壓文件
<開關>
- 停止掃描
ac 壓縮或解壓後清除存檔屬性
ad 添加壓縮文件名到目標路徑
ap<格式> 添加路徑到壓縮文件中
av- 禁用用戶身份校驗
c- 禁用注釋顯示
cfg- 禁用讀取配置
cl 名稱轉換為小寫
cu 名稱轉換為大寫
dh 打開共享文件
ep 從名稱中排除路徑
ep3 擴展路徑為包含盤符的完全路徑
f 刷新文件
id[c,d,p,q] 禁用消息
ierr 發送所有消息到標准錯誤設備
inul 禁用所有消息
ioff 完成一個操作後關閉 PC 電源
kb 保留損壞的已解壓文件
n<文件> 僅包含指定的文件
n@ 從標准輸入設備讀取文件名到包括
n@<列表> 在指定的文件列表包括文件
o+ 覆蓋已存在文件
o- 不覆蓋已存在文件
oc 設置 NTFS 壓縮屬性
or 自動重命名文件
ow 保存或恢復文件所有者和組
p[密碼] 設置密碼
p- 不詢問密碼
r 遞歸子目錄
ri
[:] 設置優先級(0-默認,1-最小..15-最大)和以毫秒為單位的休眠時間
sl<大小> 處理小於指定大小的文件
sm<大小> 處理超過指定大小的文件
ta<日期> 添加日期 <日期> 後修改的文件,日期格式 YYYYMMDDHHMMSS
tb<日期> 添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
tn<時間> 添加 <時間> 以後的文件
to< 時間> 添加 <時間> 以前的文件
ts[N] 保存或恢復文件時間(修改,創建,訪問)
u 更新文件
v 列出所有卷
ver[n] 文件版本控制
vp 每卷之前暫停
x<文件> 排除指定的文件
x@ 從標准輸入設備讀取要排除的文件名
x@<列表> 排除指定列表文件中的文件
y 假設對全部詢問都回答是
在DOS(cmd)下使用WinRAR解縮文件具體舉例:
假設,d 盤中有一個 winrar.rar,要解壓到F盤中的hello文件夾中,則在dos下輸入以下命令即可:
unrar x d:winrar.rar F:hello
希望本文所述對大家的C#程序設計有所幫助。