C#實(shí)現(xiàn)rar壓縮與解壓縮文件的方法
本文實(shí)例講述了C#實(shí)現(xiàn)rar壓縮與解壓縮文件的方法。分享給大家供大家參考。具體分析如下:
此程序利用 WinRAR 程序?qū)ξ募M(jìn)行壓縮,命令行語(yǔ)法可參考WinRAR中文幫助。
/// 利用 WinRAR 進(jìn)行壓縮
/// </summary>
/// <param name="path">將要被壓縮的文件夾(絕對(duì)路徑)</param>
/// <param name="rarPath">壓縮后的 .rar 的存放目錄(絕對(duì)路徑)</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; //注冊(cè)表鍵
Object regvalue; //鍵值
string cmd; //WinRAR 命令參數(shù)
ProcessStartInfo startinfo;
Process process;
try
{
regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
regvalue = regkey.GetValue(""); // 鍵值為 "d:\Program Files\WinRAR\WinRAR.exe" "%1"
rarexe = regvalue.ToString();
regkey.Close();
rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:\Program Files\WinRAR\WinRAR.exe
Directory.CreateDirectory(path);
//壓縮命令,相當(dāng)于在要壓縮的文件夾(path)上點(diǎn)右鍵 ->WinRAR->添加到壓縮文件->輸入壓縮文件名(rarName)
cmd = string.Format("a {0} {1} -r", rarName, path);
startinfo = new ProcessStartInfo();
startinfo.FileName = rarexe;
startinfo.Arguments = cmd; //設(shè)置命令參數(shù)
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隱藏 WinRAR 窗口
startinfo.WorkingDirectory = rarPath;
process = new Process();
process.StartInfo = startinfo;
process.Start();
process.WaitForExit(); //無(wú)限期等待進(jìn)程 winrar.exe 退出
if (process.HasExited)
{
flag = true;
}
process.Close();
}
catch (Exception e)
{
throw e;
}
return flag;
}
/// <summary>
/// 利用 WinRAR 進(jìn)行解壓縮
/// </summary>
/// <param name="path">文件解壓路徑(絕對(duì))</param>
/// <param name="rarPath">將要解壓縮的 .rar 文件的存放目錄(絕對(duì)路徑)</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(@"Applications\WinRAR.exe\shell\open\command");
regvalue = regkey.GetValue("");
rarexe = regvalue.ToString();
regkey.Close();
rarexe = rarexe.Substring(1, rarexe.Length - 7);
Directory.CreateDirectory(path);
//解壓縮命令,相當(dāng)于在要壓縮文件(rarName)上點(diǎn)右鍵 ->WinRAR->解壓到當(dāng)前文件夾
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 進(jìn)行壓縮
/// </summary>
/// <param name="path">將要被壓縮的文件夾(絕對(duì)路徑)</param>
/// <param name="rarPath">壓縮后的 .rar 的存放目錄(絕對(duì)路徑)</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; //注冊(cè)表鍵
Object regvalue; //鍵值
string cmd; //WinRAR 命令參數(shù)
ProcessStartInfo startinfo;
Process process;
try
{
regkey = Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
regvalue = regkey.GetValue(""); // 鍵值為 "d:\Program Files\WinRAR\WinRAR.exe" "%1"
rarexe = regvalue.ToString();
regkey.Close();
rarexe = rarexe.Substring(1, rarexe.Length - 7); // d:\Program Files\WinRAR\WinRAR.exe
Directory.CreateDirectory(path);
//壓縮命令,相當(dāng)于在要壓縮的文件夾(path)上點(diǎn)右鍵 ->WinRAR->添加到壓縮文件->輸入壓縮文件名(rarName)
cmd = string.Format("a {0} {1} -r", rarName, path);
startinfo = new ProcessStartInfo();
startinfo.FileName = rarexe;
startinfo.Arguments = cmd; //設(shè)置命令參數(shù)
startinfo.WindowStyle = ProcessWindowStyle.Hidden; //隱藏 WinRAR 窗口
startinfo.WorkingDirectory = rarPath;
process = new Process();
process.StartInfo = startinfo;
process.Start();
process.WaitForExit(); //無(wú)限期等待進(jìn)程 winrar.exe 退出
if (process.HasExited)
{
flag = true;
}
process.Close();
}
catch (Exception e)
{
throw e;
}
return flag;
}
/// <summary>
/// 利用 WinRAR 進(jìn)行解壓縮
/// </summary>
/// <param name="path">文件解壓路徑(絕對(duì))</param>
/// <param name="rarPath">將要解壓縮的 .rar 文件的存放目錄(絕對(duì)路徑)</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(@"Applications\WinRAR.exe\shell\open\command");
regvalue = regkey.GetValue("");
rarexe = regvalue.ToString();
regkey.Close();
rarexe = rarexe.Substring(1, rarexe.Length - 7);
Directory.CreateDirectory(path);
//解壓縮命令,相當(dāng)于在要壓縮文件(rarName)上點(diǎn)右鍵 ->WinRAR->解壓到當(dāng)前文件夾
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命令進(jìn)入到winrar的安裝目錄后,輸入unrar可出來(lái)以下提示:
用法: unrar < 命令> -<開(kāi)關(guān) 1> -<開(kāi)關(guān) N> <壓縮文件> <文件...>
<@ 列表文件...> <解壓路徑\>
<命令>
e 解壓壓縮文件到當(dāng)前目錄
l[t,b] 列出壓縮文件[技術(shù)信息,簡(jiǎn)潔]
p 打印文件到標(biāo)準(zhǔn)輸出設(shè)備
t 測(cè)試壓縮文件
v[t,b] 詳細(xì)列出壓縮文件[技術(shù)信息,簡(jiǎn)潔]
x 用絕對(duì)路徑解壓文件
<開(kāi)關(guān)>
- 停止掃描
ac 壓縮或解壓后清除存檔屬性
ad 添加壓縮文件名到目標(biāo)路徑
ap<格式> 添加路徑到壓縮文件中
av- 禁用用戶身份校驗(yàn)
c- 禁用注釋顯示
cfg- 禁用讀取配置
cl 名稱轉(zhuǎn)換為小寫(xiě)
cu 名稱轉(zhuǎn)換為大寫(xiě)
dh 打開(kāi)共享文件
ep 從名稱中排除路徑
ep3 擴(kuò)展路徑為包含盤(pán)符的完全路徑
f 刷新文件
id[c,d,p,q] 禁用消息
ierr 發(fā)送所有消息到標(biāo)準(zhǔn)錯(cuò)誤設(shè)備
inul 禁用所有消息
ioff 完成一個(gè)操作后關(guān)閉 PC 電源
kb 保留損壞的已解壓文件
n<文件> 僅包含指定的文件
n@ 從標(biāo)準(zhǔn)輸入設(shè)備讀取文件名到包括
n@<列表> 在指定的文件列表包括文件
o+ 覆蓋已存在文件
o- 不覆蓋已存在文件
oc 設(shè)置 NTFS 壓縮屬性
or 自動(dòng)重命名文件
ow 保存或恢復(fù)文件所有者和組
p[密碼] 設(shè)置密碼
p- 不詢問(wèn)密碼
r 遞歸子目錄
ri<P>[:<S>] 設(shè)置優(yōu)先級(jí)(0-默認(rèn),1-最小..15-最大)和以毫秒為單位的休眠時(shí)間
sl<大小> 處理小于指定大小的文件
sm<大小> 處理超過(guò)指定大小的文件
ta<日期> 添加日期 <日期> 后修改的文件,日期格式 YYYYMMDDHHMMSS
tb<日期> 添加日期 <日期> 前修改的文件,日期格式 YYYYMMDDHHMMSS
tn<時(shí)間> 添加 <時(shí)間> 以后的文件
to< 時(shí)間> 添加 <時(shí)間> 以前的文件
ts<m,c,a>[N] 保存或恢復(fù)文件時(shí)間(修改,創(chuàng)建,訪問(wèn))
u 更新文件
v 列出所有卷
ver[n] 文件版本控制
vp 每卷之前暫停
x<文件> 排除指定的文件
x@ 從標(biāo)準(zhǔn)輸入設(shè)備讀取要排除的文件名
x@<列表> 排除指定列表文件中的文件
y 假設(shè)對(duì)全部詢問(wèn)都回答是
在DOS(cmd)下使用WinRAR解縮文件具體舉例:
假設(shè),d 盤(pán)中有一個(gè) winrar.rar,要解壓到F盤(pán)中的hello文件夾中,則在dos下輸入以下命令即可:
unrar x d:\winrar.rar F:\hello\
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C# MeasureString測(cè)量字符串函數(shù)的使用方法
這篇文章主要介紹了C# MeasureString測(cè)量字符串函數(shù)的使用方法,需要的朋友可以參考下2014-10-10
C#學(xué)習(xí)筆記整理_變量等基礎(chǔ)語(yǔ)法(必看篇)
下面小編就為大家?guī)?lái)一篇C#學(xué)習(xí)筆記整理_變量等基礎(chǔ)語(yǔ)法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
C#的Socket實(shí)現(xiàn)UDP協(xié)議通信示例代碼
本篇文章主要介紹了C#的Socket實(shí)現(xiàn)UDP協(xié)議通信示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
C# Redis學(xué)習(xí)系列(二)Redis基本設(shè)置
這篇文章主要為大家分享了C# Redis學(xué)習(xí)系列教程第二篇, Redis基本設(shè)置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去
這篇文章主要介紹了C# 用什么方法將BitConverter.ToString產(chǎn)生字符串再轉(zhuǎn)換回去,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
C#調(diào)用Oracle存儲(chǔ)過(guò)程方法介紹(附源碼)
這篇文章介紹了C#調(diào)用Oracle存儲(chǔ)過(guò)程的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03

