C#实现rar压缩与解压缩文件的方法
本文实例讲述了c#实现rar压缩与解压缩文件的方法。分享给大家供大家参考。具体分析如下:
此程序利用 winrar 程序对文件进行压缩,命令行语法可参考winrar中文帮助。
/// 利用 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(@"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); //压缩命令,相当于在要压缩的文件夹(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(@"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 = 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(@"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); //压缩命令,相当于在要压缩的文件夹(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(@"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 = 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<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下输入以下命令即可:
unrar x d:\winrar.rar f:\hello\
希望本文所述对大家的c#程序设计有所帮助。
上一篇: zuul动态路由加载配置
下一篇: PySpark DataFrame