C#实现rar压缩与解压缩文件的方法
本文实例讲述了C#实现rar压缩与解压缩文件的方法。分享给大家供大家参考。具体分析如下:
此程序利用WinRAR程序对文件进行压缩,命令行语法可参考WinRAR中文帮助。
///利用WinRAR进行压缩
///</summary>
///<paramname="path">将要被压缩的文件夹(绝对路径)</param>
///<paramname="rarPath">压缩后的.rar的存放目录(绝对路径)</param>
///<paramname="rarName">压缩文件的名称(包括后缀)</param>
///<returns>true或false。压缩成功返回true,反之,false。</returns>
publicboolRAR(stringpath,stringrarPath,stringrarName)
{
boolflag=false;
stringrarexe;//WinRAR.exe的完整路径
RegistryKeyregkey;//注册表键
Objectregvalue;//键值
stringcmd;//WinRAR命令参数
ProcessStartInfostartinfo;
Processprocess;
try
{
regkey=Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
regvalue=regkey.GetValue("");//键值为"d:\ProgramFiles\WinRAR\WinRAR.exe""%1"
rarexe=regvalue.ToString();
regkey.Close();
rarexe=rarexe.Substring(1,rarexe.Length-7);//d:\ProgramFiles\WinRAR\WinRAR.exe
Directory.CreateDirectory(path);
//压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
cmd=string.Format("a{0}{1}-r",rarName,path);
startinfo=newProcessStartInfo();
startinfo.FileName=rarexe;
startinfo.Arguments=cmd;//设置命令参数
startinfo.WindowStyle=ProcessWindowStyle.Hidden;//隐藏WinRAR窗口
startinfo.WorkingDirectory=rarPath;
process=newProcess();
process.StartInfo=startinfo;
process.Start();
process.WaitForExit();//无限期等待进程winrar.exe退出
if(process.HasExited)
{
flag=true;
}
process.Close();
}
catch(Exceptione)
{
throwe;
}
returnflag;
}
///<summary>
///利用WinRAR进行解压缩
///</summary>
///<paramname="path">文件解压路径(绝对)</param>
///<paramname="rarPath">将要解压缩的.rar文件的存放目录(绝对路径)</param>
///<paramname="rarName">将要解压缩的.rar文件名(包括后缀)</param>
///<returns>true或false。解压缩成功返回true,反之,false。</returns>
publicboolUnRAR(stringpath,stringrarPath,stringrarName)
{
boolflag=false;
stringrarexe;
RegistryKeyregkey;
Objectregvalue;
stringcmd;
ProcessStartInfostartinfo;
Processprocess;
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);
//解压缩命令,相当于在要压缩文件(rarName)上点右键->WinRAR->解压到当前文件夹
cmd=string.Format("x{0}{1}-y",rarName,path);
startinfo=newProcessStartInfo();
startinfo.FileName=rarexe;
startinfo.Arguments=cmd;
startinfo.WindowStyle=ProcessWindowStyle.Hidden;
startinfo.WorkingDirectory=rarPath;
process=newProcess();
process.StartInfo=startinfo;
process.Start();
process.WaitForExit();
if(process.HasExited)
{
flag=true;
}
process.Close();
}
catch(Exceptione)
{
throwe;
}
returnflag;
}
///<summary>
///利用WinRAR进行压缩
///</summary>
///<paramname="path">将要被压缩的文件夹(绝对路径)</param>
///<paramname="rarPath">压缩后的.rar的存放目录(绝对路径)</param>
///<paramname="rarName">压缩文件的名称(包括后缀)</param>
///<returns>true或false。压缩成功返回true,反之,false。</returns>
publicboolRAR(stringpath,stringrarPath,stringrarName)
{
boolflag=false;
stringrarexe;//WinRAR.exe的完整路径
RegistryKeyregkey;//注册表键
Objectregvalue;//键值
stringcmd;//WinRAR命令参数
ProcessStartInfostartinfo;
Processprocess;
try
{
regkey=Registry.ClassesRoot.OpenSubKey(@"Applications\WinRAR.exe\shell\open\command");
regvalue=regkey.GetValue("");//键值为"d:\ProgramFiles\WinRAR\WinRAR.exe""%1"
rarexe=regvalue.ToString();
regkey.Close();
rarexe=rarexe.Substring(1,rarexe.Length-7);//d:\ProgramFiles\WinRAR\WinRAR.exe
Directory.CreateDirectory(path);
//压缩命令,相当于在要压缩的文件夹(path)上点右键->WinRAR->添加到压缩文件->输入压缩文件名(rarName)
cmd=string.Format("a{0}{1}-r",rarName,path);
startinfo=newProcessStartInfo();
startinfo.FileName=rarexe;
startinfo.Arguments=cmd;//设置命令参数
startinfo.WindowStyle=ProcessWindowStyle.Hidden;//隐藏WinRAR窗口
startinfo.WorkingDirectory=rarPath;
process=newProcess();
process.StartInfo=startinfo;
process.Start();
process.WaitForExit();//无限期等待进程winrar.exe退出
if(process.HasExited)
{
flag=true;
}
process.Close();
}
catch(Exceptione)
{
throwe;
}
returnflag;
}
///<summary>
///利用WinRAR进行解压缩
///</summary>
///<paramname="path">文件解压路径(绝对)</param>
///<paramname="rarPath">将要解压缩的.rar文件的存放目录(绝对路径)</param>
///<paramname="rarName">将要解压缩的.rar文件名(包括后缀)</param>
///<returns>true或false。解压缩成功返回true,反之,false。</returns>
publicboolUnRAR(stringpath,stringrarPath,stringrarName)
{
boolflag=false;
stringrarexe;
RegistryKeyregkey;
Objectregvalue;
stringcmd;
ProcessStartInfostartinfo;
Processprocess;
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);
//解压缩命令,相当于在要压缩文件(rarName)上点右键->WinRAR->解压到当前文件夹
cmd=string.Format("x{0}{1}-y",rarName,path);
startinfo=newProcessStartInfo();
startinfo.FileName=rarexe;
startinfo.Arguments=cmd;
startinfo.WindowStyle=ProcessWindowStyle.Hidden;
startinfo.WorkingDirectory=rarPath;
process=newProcess();
process.StartInfo=startinfo;
process.Start();
process.WaitForExit();
if(process.HasExited)
{
flag=true;
}
process.Close();
}
catch(Exceptione)
{
throwe;
}
returnflag;
}
在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<P>[:<S>]  设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间 
 sl<大小>     处理小于指定大小的文件 
 sm<大小>     处理超过指定大小的文件 
 ta<日期>     添加日期<日期>后修改的文件,日期格式YYYYMMDDHHMMSS 
 tb<日期>     添加日期<日期>前修改的文件,日期格式YYYYMMDDHHMMSS 
 tn<时间>     添加<时间>以后的文件 
 to<时间>     添加<时间>以前的文件 
 ts<m,c,a>[N] 保存或恢复文件时间(修改,创建,访问) 
 u            更新文件 
 v            列出所有卷 
 ver[n]       文件版本控制 
 vp           每卷之前暂停 
 x<文件>      排除指定的文件 
 x@           从标准输入设备读取要排除的文件名 
 x@<列表>     排除指定列表文件中的文件 
 y            假设对全部询问都回答是
在DOS(cmd)下使用WinRAR解缩文件具体举例:
假设,d盘中有一个winrar.rar,要解压到F盘中的hello文件夹中,则在dos下输入以下命令即可:
unrarxd:\winrar.rarF:\hello\
希望本文所述对大家的C#程序设计有所帮助。