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 registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");

            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;
        }


以上代码都是通过网上的资源整合而来,并非原创
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值