C# 调用Winrar.exe压缩文件

1、封装

 /// <summary>
        /// 调用Winrar.exe进行压缩文件
        /// </summary>
        /// <param name="sourcePath">需要压缩文件路径</param>
        /// <param name="rarPath">压缩文件路径</param>
        /// <param name="isDeleteFile">压缩成功是否删除源文件</param>
        /// <param name="errMsg">压缩失败异常原因</param>
        /// <returns></returns>
        public static bool GetRAR(string sourcePath, string rarPath, bool isDeleteFile, out string errMsg)
        {
            errMsg = string.Empty;
            System.Diagnostics.Process winRarPro = new System.Diagnostics.Process();
            try
            {
                //通过Regedit(注册表)找到WinRar文件
                var registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe");
                if (registryKey == null)
                {
                    errMsg = $"未安装WinRar软件";
                    return false;
                }
                //获取winRar路径
                string winRarPath = registryKey.GetValue("")?.ToString();
                //关闭注册表
                registryKey.Close();
                winRarPro.StartInfo.FileName = winRarPath;
                //是否创建一个线程
                winRarPro.StartInfo.CreateNoWindow = true;
                if (!System.IO.File.Exists(sourcePath))
                {
                    errMsg = $"需要压缩的文件不存在;{sourcePath}";
                    return false;
                }
                winRarPro.StartInfo.Arguments = " a -ep " + rarPath + " " + sourcePath;
                winRarPro.Start();
                //等待压缩时间(单位毫秒)
                winRarPro.WaitForExit(50000);
                //删除临时文件
                if (isDeleteFile == true)
                {
                    System.IO.File.Delete(sourcePath);
                }
                return true;
            }
            catch (Exception ex)
            {
                errMsg = $"压缩失败;{ex.Message};{ex.ToString()}";
                return false;
            }
            finally
            {
                winRarPro?.Close();
                winRarPro?.Dispose();
            }
        }

调用测试

 string msg = string.Empty;
            string sourceFilePath = "D:\\日志\\1.xls";
            string compressedFilePathName = "D:\\日志\\1.rar";
            GetRAR(sourceFilePath, compressedFilePathName, false, out msg);

 

posted @ 2022-10-03 22:58  博客YS  阅读(161)  评论(0编辑  收藏  举报