C#利用WinRAR实现压缩和解压缩
using System; using Microsoft.Win32; using System.Diagnostics; using System.IO; namespace MSCL { /// <summary> /// 压缩解压类 /// </summary> public class ZipHelper { /// <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(@"Applications\WinRAR.exe\shell\open\command"); regvalue = regkey.GetValue("WinRAR"); // 键值为 "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(@"Applications\WinRAR.exe\shell\open\command"); 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; } } }
分类:
C#.Net & MVC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架