zoukankan      html  css  js  c++  java
  • C# 调用WinRar执行rar、zip压缩

    先来简单说说压缩文件的好处,既然要用到那还是知道点好。

    1、节约硬盘资源,方便管理

          下面的代码所执行的压缩是存储压缩,

          对于文件的大小控制的不是那么严格,

          但是对于节约硬盘资源的原理是从磁盘的扇区角度上来说的。

    2、便于传输

          大家都知道用QQ或其他工具传输资源时,

          压缩文件明显要快些。

          由于文件太散程序也比较累。

          其原理也是因为磁盘寻道要话时间

        (这里提醒下广大市民如果有时间还是整理下磁盘碎片吧。)

    上面都是废话,这里才是正题。

    /// <summary>
    /// 验证WinRar是否安装。
    /// </summary>
    /// <returns>true:已安装,false:未安装</returns>
    private static bool ExistsRar(out String winRarPath)
    {
        winRarPath = String.Empty;
    
        //通过Regedit(注册表)找到WinRar文件 
        var path = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe";
        var registryKey = Registry.LocalMachine.OpenSubKey(path);
    
        if (registryKey == null) return false;//未安装
    
        //registryKey = theReg;可以直接返回Registry对象供会面操作
        winRarPath = registryKey.GetValue("").ToString();//这里为节约资源,直接返回路径,反正下面也没用到
    
        registryKey.Close();//关闭注册表
    
        return !String.IsNullOrEmpty(winRarPath);
    }

    该方法不要用于判断用户是否安装WinRar,

    以判断是否继续执行一下代码

    /// <summary>
    /// 生成Zip
    /// </summary>
    /// <param name="path">文件夹路径</param>
    /// <param name="rarPath">生成压缩文件的路径</param>
    /// <param name="rarName">生成压缩文件的文件名</param>
    public static void CompressRar(String path, String rarPath, String rarName)
    {
        try
        {
            String winRarPath = null;
            if (!ExistsRar(out winRarPath)) return;//验证WinRar是否安装。
    
            var pathInfo = String.Format("a -afzip -m0 -ep1 \"{0}\" \"{1}\"", rarName, path);
    
            #region WinRar 用到的命令注释
    
            //[a] 添加到压缩文件
            //afzip 执行zip压缩方式,方便用户在不同环境下使用。(取消该参数则执行rar压缩)
            //-m0 存储 添加到压缩文件时不压缩文件。共6个级别【0-5】,值越大效果越好,也越慢
            //ep1 依名称排除主目录(生成的压缩文件不会出现不必要的层级)
            //r   修复压缩档案
            //t   测试压缩档案内的文件 
            //as  同步压缩档案内容  
            //-p  给压缩文件加密码方式为:-p123456
    
            #endregion
    
            //打包文件存放目录
            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = winRarPath,//执行的文件名
                    Arguments = pathInfo,//需要执行的命令
                    UseShellExecute = false,//使用Shell执行
                    WindowStyle = ProcessWindowStyle.Hidden,//隐藏窗体
                    WorkingDirectory = rarPath,//rar 存放位置
                    CreateNoWindow = false,//不显示窗体
                },
            };
            process.Start();//开始执行
            process.WaitForExit();//等待完成并退出
            process.Close();//关闭调用 cmd 的什么什么
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    配合上面方法成功完成zip压缩。

    本来还想加是上一个添加注释的功能,

    但是在网上找到的都是通过文件添加注释,这种方式不是我想要的。

    由于时间关系暂时放下了。

    下面再贴一个解压的方法,由于现在还没有用到解压的功能,

    所以以下方法还未经测试。

    /// <summary>
    /// 解压
    /// </summary>
    /// <param name="unRarPath">文件夹路径</param>
    /// <param name="rarPath">压缩文件的路径</param>
    /// <param name="rarName">压缩文件的文件名</param>
    /// <returns></returns>
    public static String UnCompressRar(String unRarPath, String rarPath, String rarName)
    {
        try
        {
            String winRarPath = null;
            if (!ExistsRar(out winRarPath)) return "";//验证WinRar是否安装。
    
            if (Directory.Exists(unRarPath) == false)
            {
                Directory.CreateDirectory(unRarPath);
            }
    
            var pathInfo = "x " + rarName + " " + unRarPath + " -y";
    
            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = winRarPath,//执行的文件名
                    Arguments = pathInfo,//需要执行的命令
                    UseShellExecute = false,//使用Shell执行
                    WindowStyle = ProcessWindowStyle.Hidden,//隐藏窗体
                    WorkingDirectory = rarPath,//rar 存放位置
                    CreateNoWindow = false,//不显示窗体
                },
            };
            process.Start();//开始执行
            process.WaitForExit();//等待完成并退出
            process.Close();//关闭调用 cmd 的什么什么
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return unRarPath;
    }

    最后补充点,如果安装了WinRAR而又不能调用成功,

    试试将安装目录下的:Rar.exe 文件复制到 System32 下。

    以上代码都是通过网上的资源整合而来,并非原创

  • 相关阅读:
    文佳夹之删除
    猜谜小游戏
    python小知识点
    【bzoj4516】[Sdoi2016]生成魔咒 后缀数组+倍增RMQ+STL-set
    【bzoj3362/3363/3364/3365】[Usaco2004 Feb]树上问题杂烩 并查集/树的直径/LCA/树的点分治
    【poj1741】Tree 树的点分治
    【bzoj2946】[Poi2000]公共串 后缀数组+二分
    【bzoj2157】旅游 树链剖分+线段树
    【bzoj2743】[HEOI2012]采花 树状数组
    【bzoj2705】[SDOI2012]Longge的问题 欧拉函数
  • 原文地址:https://www.cnblogs.com/fxck/p/13076981.html
Copyright © 2011-2022 走看看