C# 调用 rar 命令行
时间:2011-04-16 来源:the illusion
/// <summary> /// Rar 是调用 rar 命令行的工具。 /// </summary> public class Rar { /// <summary> /// /// </summary> /// <param name="rarCommandPath">rar命令行工具在路径,例如:"C:\Program Files\WinRAR\rar.exe"</param> public Rar(string rarCommandPath) { this._RarCommandPath = rarCommandPath; } /// <summary> /// 创建此类的实例,使用 "C:\Program Files\WinRAR\rar.exe" 作为 rarCommandPath 的值 /// </summary> public Rar() : this(Rar.Default_RAR_Command_Path) { } /// <summary> /// 从一个 rar 文件中解压 /// </summary> /// <param name="rarFile">要解压的 rar 文件,绝对路径</param> /// <param name="path">指定将文件解压到哪个目录,绝对路径,末尾有无 \ 均可</param> /// <returns>一共解压了几个文件</returns> public virtual string Extract(string rarFile, string path) { // 使用类似这个的 rar 命令: rar x test.rar "c:\test\" 路径后必须有 \ // 调用 rar 命令 if (path.EndsWith(@"\") == false) { path += @"\"; } string args = string.Format(@" x ""{0}"" ""{1}""", rarFile, path); ProcessStartInfo psi = new ProcessStartInfo(RarCommandPath, args); psi.UseShellExecute = false; psi.RedirectStandardOutput = true; psi.CreateNoWindow = true; Process p = Process.Start(psi); //// 捕获输出 string ret = p.StandardOutput.ReadToEnd(); p.WaitForExit(); return ret; } /// <summary> /// 创建一个 rar 文件,并将指定的文件添加到其中 /// </summary> /// <param name="rarFile">要创建的 rar 文件,应为相对于 baseDir 的路径</param> /// <param name="files">要添加到 rar 文件的一组文件,应为相对于 baseDir 的路径</param> /// <param name="baseDir">基目录,在此方法工作过程,当前目录会被设为基目录,方法结束前,将当前目录还原</param> /// <returns></returns> public virtual string Add(string rarFile, string[] files, string baseDir) { // 使用类似这个的 rar 命令: rar a test.rar @list.txt // 设置当前目录 string origCurDir = Environment.CurrentDirectory; Environment.CurrentDirectory = baseDir; // 创建临时文件,将 files 参数写入其中, string listFilePath = @"list.txt"; using (StreamWriter sw = new StreamWriter(listFilePath, false, Encoding.Default)) { for (int i = 0; i < files.Length; i++) { sw.WriteLine(files[i]); } } // 调用 rar 命令 string args = string.Format(@" a ""{0}"" ""@{1}""", rarFile, listFilePath); ProcessStartInfo psi = new ProcessStartInfo(RarCommandPath, args); psi.UseShellExecute = false; psi.RedirectStandardOutput = true; psi.CreateNoWindow = true; Process p = Process.Start(psi); //// 捕获输出 string ret = p.StandardOutput.ReadToEnd(); p.WaitForExit(); // 删除列表 list.txt File.Delete(listFilePath); // 还原当前目录 Environment.CurrentDirectory = origCurDir; return ret; } /// <summary> /// 获取 rar 命令行工具的路径,例如:"C:\Program Files\WinRAR\rar.exe" /// </summary> public string RarCommandPath { get { return _RarCommandPath; } } private string _RarCommandPath; /// <summary> /// 默认的 rar 命令行位置,值为 @"C:\Program Files\WinRAR\rar.exe" /// </summary> public const string Default_RAR_Command_Path = @"C:\Program Files\WinRAR\rar.exe"; /// <summary> /// 测试一个文件是否是压缩包。 /// </summary> /// <param name="path"></param> /// <returns></returns> public bool TestFile(string path) { // 使用类似这个的 rar 命令: rar t "path" // 调用 rar 命令 string args = string.Format(@" t ""{0}""", path); ProcessStartInfo psi = new ProcessStartInfo(RarCommandPath, args); psi.UseShellExecute = false; psi.RedirectStandardOutput = true; psi.CreateNoWindow = true; Process p = Process.Start(psi); //// 捕获输出 string ret = p.StandardOutput.ReadToEnd(); p.WaitForExit(); if (ret.ToLower().Trim().EndsWith("ok")) { return true; } else { return false; } } }
相关阅读 更多 +