C#调用WinRAR命令行实现加密压缩与解压

栗子
栗子
发布时间:2026-10-13| 5人浏览过
原创

在C#应用开发中,经常需要利用系统现有的压缩工具进行文件打包与分发。本文将演示如何通过System.Diagnostics.Process类调用本地安装的WinRAR可执行文件,实现包括普通压缩、移动压缩以及关键的加密压缩与解密功能。

核心思路与准备工作

C#本身并不直接内置像7z那样支持多种格式的开源压缩库接口(虽然存在第三方库,但有时为了兼容性或依赖系统环境,直接调用WinRAR更佳)。其核心原理是构建一个进程,指定启动文件为WinRAR的可执行路径,并通过Arguments属性传入符合WinRAR语法的命令行参数。

准备条件:

  • 目标机器已安装WinRAR软件,且Winrar.exe在系统环境变量PATH中,或在代码中指定绝对路径。
  • 理解WinRAR命令行的基本逻辑:命令 + 开关参数 + 压缩包路径 + 源文件/文件夹路径。

第1步:配置进程基础信息

首先实例化Process对象,并配置启动行为,确保过程在后台静默运行,不弹出黑框窗口。

using System.Diagnostics;

protected void Button1_Click(object sender, EventArgs e)
{
    // 定义要处理的源文件和目标压缩包路径
    string strtxtPath = "C://freezip//free.txt"; 
    string strzipPath = "C://freezip//free.zip";

    Process Process1 = new Process();
    Process1.StartInfo.FileName = "Winrar.exe"; // 若不在PATH中需写绝对路径
    Process1.StartInfo.CreateNoWindow = true;   // 隐藏控制台窗口
    Process1.StartInfo.UseShellExecute = false; // 必须设为false才能重定向输入输出或使用CreateNoWindow
}

第2步:实现普通压缩与格式选择

使用a命令(Add)将文件添加到压缩包。默认情况下,WinRAR会使用.rar格式,若要生成.zip包,可通过修改Arguments中的后缀或使用-afzip参数强制指定。

场景A:递归压缩文件夹及其内容 (.rar)

目的:将指定路径下的所有文件及其子文件夹打包。
入口:Process1.StartInfo.Arguments
动作:" a -r " + zipPath + " " + srcPath
关键参数:-r表示递归包含子目录。
完成状态:目录下生成.rar文件。

场景B:指定生成Zip格式

目的:强制生成.zip格式压缩包。
动作:" a -afzip " + zipPath + " " + srcPath
注意:当文件名已显式以.zip结尾时,WinRAR通常会自动识别;若未显式指定或使用其他扩展名,建议加上-afzip开关。

第3步:执行移动压缩(剪切效果)

如果需要在压缩后删除源文件,节省磁盘空间,应使用m命令(Move)而非a(Add)。

操作步骤:

  • 参数:m
  • 语法:Process1.StartInfo.Arguments = " m " + zipPath + " " + srcPath;
  • 结果:压缩完成后,srcPath对应的文件或文件夹将从原位置消失。

第4步:实现加密压缩与解密

这是安全性要求较高的场景。WinRAR命令行通过-p参数传递密码。需要注意的是,密码字符串必须紧跟在-p之后,中间不能有空格。

4.1 加密压缩操作

目的:创建需要密码才能打开的ZIP或RAR文件。
入口:Arguments
动作:" a -p123456 " + zipPath + " " + srcPath
注意:如果使用的是x命令(见下一步),加密语法同样适用。
风险提醒:请妥善保存密码,一旦丢失无法恢复。

4.2 加密解压操作

目的:释放带有密码保护的压缩包。
入口:Arguments
动作:" x -p123456 " + zipPath + " " + extractPath
关键差异:
- 使用x命令而非e命令。x会保留完整的目录结构,而e会将所有文件提取到根目录。
- -p123456必须紧贴-p,否则会被视为空密码或报错。

第5步:排除路径结构与其他常用技巧

有时我们希望压缩包内的结构更加扁平,或者只打包当前文件而不带入父文件夹层级:

  • 排除顶层文件夹:使用-ep1。例如,压缩文件夹A/B/C,如果不加参数,包里会有A/B/C的路径;加上-ep1后,包里直接从B开始存放。
    参数示例:" a -ep1 " + zipPath + " " + srcPath
  • 完全排除路径:使用-ep(或-ep3),将仅保留文件名,丢弃所有文件夹信息。

第6步:验证执行结果

启动进程后,可以通过检查进程是否退出来判断操作是否完成。对于耗时较长的批量任务,可能需要增加等待逻辑。

Process1.Start();  
Process1.WaitForExit(); // 更好的做法是等待退出,避免页面在未完成时返回

if (Process1.HasExited)
{
    Response.Write("完成");
}

常见参数速查表

参数 说明
a 添加文件到压缩文件
m 移动文件和文件夹到压缩文件(原文件被删)
x 以完整路径名称从压缩文件解压(保留结构)
-r 递归包含子文件夹
-p[密码] 设置密码,密码紧接参数后
-ep/-ep1 从名称中排除路径 / 排除主文件夹
-o+/-o- 覆盖已有文件 / 不覆盖已有文件

以上就是在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 算法库。