/// <summary>
/// 利用 WinRAR 进行压缩
/// </summary>
/// <param name="path">将要被压缩的文件夹(绝对路径)</param>
/// <param name="rarPath">压缩后的 .rar 的存放目录(绝对路径)</param>
/// <param name="rarName">压缩文件的名称(包括后缀)</param>
/// <returns>true 或 false。压缩成功返回 true,反之,false。</returns>
public static 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.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
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 static 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.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
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;
}
RAR参数:
用法: rar <命令>-<开关 1> -<开关 N> <压缩文件> <文件...>
<@列表文件...> <解压路径\>
<命令>
a
添加文件到压缩文件
c
添加压缩文件注释
cf
添加文件注释
cw
写入压缩文件注释到文件
d
删除压缩文件中的文件
e
解压压缩文件到当前目录
f
刷新压缩文件中的文件
i[参数]=<串>
在压缩文件中查找字符串
k
锁定压缩文件
l[t,b]
列出压缩文件[技术信息,简洁]
m[f]
移动到压缩文件[仅对文件]
p
打印文件到标准输出设备
r
修复压缩文件
rc
重建丢失的卷
rn
重命名压缩文件
rr[N]
添加数据恢复记录
rv[N]
创建恢复卷
s[名字|-]
转换压缩文件为自解压格式或转换回压缩文件
t
测试压缩文件
u
更新压缩文件中的文件
v[t,b]
详细列出压缩文件[技术信息,简洁]
x
用绝对路径解压文件
<开关>
-
停止扫描
ac
压缩或解压后清除文件属性
ad
添加压缩文件名到目标路径
ag[格式]
使用当前日期生成压缩文件名
ao
添加具有压缩属性的文件
ap<格式>
添加路径到压缩文件中
as
同步压缩文件内容
av
添加用户身份校验(仅注册版本可用)
av-
禁用用户身份校验
c-
禁用注释显示
cfg-
禁用读取配置
cl
名称转换为小写
cu
名称转换为大写
df
压缩后删除文件
dh
打开共享文件
ds
对固实压缩文件禁用名称排序
e<属性>
设置文件排除属性
ed
不添加空目录
en
不添加"压缩文件结束"标志
ep
从名称中排除路径
ep1
从名称中排除基本目录
ep2
展开为完整路径
f
刷新文件
hp[密码]
同时加密文件数据和文件头
idp
禁用百分比显示
ieml[属性]
用E-mail发送压缩文件
ierr
发送所有消息到标准错误设备
ilog[名称]
把错误写到日志文件(只有注册版本可用)
inul
禁用所有消息
ioff
完成一个操作后关闭PC电源
isnd
启用声音
k
锁定压缩文件
kb
保留损坏的已解压文件
m<0..5>
设置压缩级别(0-存储...3-默认...5-最大)
mc<参数>
设置高级压缩参数
md<大小>
以KB为单位的字典大小(64,128,256,512,1024,2048,4096 or A-G)
ms[ext;ext]
指定存储的文件类型
o+
覆盖已存在文件
o-
不覆盖已存在文件
os
保存NTFS流
ow
保存或恢复文件所有者和组
p[密码]
设置密码
p-
不询问密码
r
递归子目录
r0
仅递归通配符名称的子目录
ri<P>[:<S>]
设置优先级(0-默认,1-最小..15-最大)和以毫秒为单位的休眠时间
rr[N]
添加数据恢复记录
rv[N]
创建恢复卷
s[<N>,v[-],e]
创建固实压缩文件
s-
禁用固实压缩文件
sfx[名称]
创建自解压压缩文件
t
压缩后测试文件
ta<日期>
添加日期<日期>后修改的文件,日期格式YYYYMMDDHHMMSS
tb<日期>
添加日期<日期>前修改的文件,日期格式YYYYMMDDHHMMSS
tk
保留原始压缩文件时间
tl
设置压缩文件时间为最新文件时间
tn<时间>
添加<时间>以后的文件
to<时间>
添加<时间>以前的文件
ts<m,c,a>[N]
保存或恢复文件时间(修改,创建,访问)
u
更新文件
v
自动检测创建卷的大小或者列出所有的卷
v<大小>[k,b]
创建卷大小=<大小>*1000[*1024, *1]
vd
创建容量前清除磁盘内容
ver[n]
文件版本控制
vn
使用旧风格的卷命名方案
vp
每卷之前暂停
w<路径>
指定工作目录
x<文件>
排除指定的文件
x@
从标准输入设备读取要排除的文件名
x@<列表>
排除指定列表文件中的文件
y
假设对全部询问都回答是
z<文件>
从文件读取压缩文件注释
示例:
1、rar a file file.ext
如果file.rar不存在将创建file.rar文件;如果file.rar压缩包中已有file.ext,将更新压缩包中的file.ext;还可用d:\*.ext代替file.ext将d盘下所有ext文件(不包括自文件夹)添加到压缩包中。
2、rar a -r -v2000 -s -sfx -rr file
从当前文件夹和子文件夹压缩全部文件成为 2000000 字节大小、固实的、分卷自解压文件 file.part1.exe,file.part2.rar,file.part3.rar 等,并在每一个分卷中添加恢复记录;将命令a换成命令m可将文件压缩后删除
3、rar x Fonts *.ttf
会从压缩文件解压 *.ttf 字体文件到当前文件夹,但下面命令:
rar x Fonts *.ttf NewFonts\
会从压缩文件解压 *.ttf 字体文件到文件夹 NewFont
4、rar a -pZaBaToAd -r secret games\*.*
使用密码 ZaBaToAd 来将文件夹“games”的内容添加到压缩文件“secret”