C#通过WinRAR命令行压缩文件及解析返回值

苏见山
苏见山
发布时间:2026-10-13| 4人浏览过
原创

在Windows桌面应用开发中,经常需要集成文件压缩功能。虽然可以使用第三方库如SharpZipLib,但直接调用广泛安装的WinRAR控制台程序(Rar.exe)通常具有更好的兼容性。本文介绍如何利用C#中的 System.Diagnostics.Process 启动外部进程,执行带参数的压缩指令,并通过监听进程退出事件来解析返回的状态代码。

环境准备与依赖

要实现此功能,首先需要确保运行环境中存在 WinRAR 的可执行文件。建议从官方网站下载便携版或安装版的命令行工具 Rar.exe,并将其放置在应用程序的相对目录下,或通过绝对路径明确引用。

C# 实现步骤

第1步:配置进程启动参数

使用 ProcessStartInfo 对象设置 RAR 命令行的详细参数。关键配置包括:
- FileName: 指向 Rar.exe。
- WindowStyle: 设置为 Minimized 以避免弹窗干扰用户体验。
- Arguments: 构建具体的 RAR 指令串。

// 假设 saveRank 为压缩等级 (0-5),fileName 为目标存档名前缀,rarPath 为待压缩目录
int saveRank = 5; // 示例:默认压缩级别
string fileName = "MyLuoLuo";
string rarPath = @"D:\\Txt";

process.StartInfo.FileName = "Rar.exe";
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
process.EnableRaisingEvents = true;
// 构造参数:a=添加, -mN=压缩等级, -ag[格式]=自动生成日期后缀
process.StartInfo.Arguments = string.Format(@"a -m{0} -ag[yyyy年mm月dd日_hh点mm分-ss] {1}\\MyLuoLuo.rar {2}", 
    saveRank, fileName, rarPath);

参数说明:
- a: 添加到压缩档案命令。
- -m5: 最大压缩比(可选范围 0-5)。
- -ag[...]: 自动给压缩文件名附加当前时间,避免覆盖同名文件。

第2步:绑定退出事件并执行

由于外部进程耗时较长,不应阻塞主线程等待完成。最佳实践是订阅 Exited 事件,当压缩结束后自动回调处理结果。

private void BtnRAR_Click(object sender, EventArgs e)
{
    if (!System.IO.File.Exists("Rar.exe"))
    {
        MessageBox.Show("未找到 Rar.exe,请确认文件路径。");
        return;
    }

    try
    {
        process = new System.Diagnostics.Process();
        // ... 上述参数配置代码 ...
        process.Exited += new EventHandler(RarStop); // 绑定处理函数
        process.Start(); // 异步启动
    }
    catch (Exception ex)
    {
        MessageBox.ShowError("启动失败: " + ex.Message);
    }
}

解析 RAR 返回值

WinRAR 命令行执行完毕后,会向操作系统返回一个整型状态码。在 RarStop 事件中读取 process.ExitCode,即可判断任务是否成功。

  • 0: 无错误,操作成功。
  • 1: 警告,有错误发生但不是致命的(例如尝试压缩已存在的文件)。
  • 2: 严重错误,操作因致命错误中断。
  • 3: CRC 校验错误(数据损坏)。
  • 4: 试图修改用 -k 锁定的压缩文件。
  • 5~9: 磁盘写入、文件打开、内存不足等系统级错误。
  • 7: 命令行选项输入错误。
  • 255: 用户主动中断操作。
private void RarStop(object sender, System.EventArgs e)
{
    switch (process.ExitCode)
    {
        case 0:
            MessageBox.ShowInformation("压缩成功!");
            break;
        case 1:
            MessageBox.ShowInformation("发生非致命错误,见日志!");
            break;
        default:
            MessageBox.ShowError($"发生错误 (代码:{process.ExitCode})");
            break;
    }
}

以上就是C#调用WinRAR命令行压缩文件及获取返回值的详细内容,更多关于C#进程管理的技巧资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。