zoukankan      html  css  js  c++  java
  • WinRAR(WinZip)压缩与解压实现(C#版Window平台)

    本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用)。

    先来看WinRAR(WinZip)自身的支持调用命令:

    压缩命令:a {0} {1} -r 【{0}:压缩后文件名|{1}:待压缩的文件物理路径】

    ex:"a 你妹.rar f:\\MM -r" (含义为将f盘下MM的文件夹压缩为"你妹.rar"文件)

    解压命令:x {0} {1} -y 【{0}:待解压文件名称|{1}:待解压文件物理路径】

    ex:"x 幺妹.rar f:\\幺妹 -y"(待压缩文件物理路径:"f:\\幺妹\\幺妹.rar")

    参数说明

    参数

    含义

    a

    添加文件到压缩包

    x

    以完整路径从压缩包解开压缩

    WinZip(WinRAR)调用通用类

           /// <summary>
    /// Name:Stone
    /// DateTime: 2011/12/31 16:39:26
    /// Description:WinRAR压缩
    /// </summary>
    public class WinRARCSharp
    {
    // WinRAR安装注册表key
    private const string WinRAR_KEY = @"WinRAR.ZIP\shell\open\command";
    /// <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(WinRAR_KEY);
    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(WinRAR_KEY);
    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;
    }



  • 相关阅读:
    iOS --有行距的图文混排
    iOS 。开发之指纹识别功能
    ios UICollectionView reloadData无法更新的奇怪问题。
    ios
    ios
    iOS --随机打乱一个数组的顺序 获得一个新的数组
    PYTHON -转载,获取淘宝数据01
    ios . -- UICollectionView --cell 自适应
    Web 四种常见的POST提交数据方式
    Objective-C 谈谈深浅拷贝,copy和mutable copy都不是完全拷贝
  • 原文地址:https://www.cnblogs.com/szytwo/p/2408552.html
Copyright © 2011-2022 走看看