/// <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)
{
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)
{
string
origCurDir = Environment.CurrentDirectory;
Environment.CurrentDirectory = baseDir;
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]);
}
}
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();
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)
{
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
;
}
}
}
【推荐】国内首个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应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决