韩言福地

只有想不到的,没有办不到的。 - HY Auspicious Place

关键字:
首页 点击这里给我发消息

c# rar压缩解压缩

浏览量:253 更新时间:2009-12-16 13:34:59

  /// <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”