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#程序设计有所帮助。