You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中精简7-Zip压缩时的输出/日志内容?

解决7-Zip输出过滤,仅保留压缩进度行

当然可以实现!你需要通过重定向7-Zip的标准输出,并在代码中过滤出符合你需求的进度行。下面是修改后的完整代码和关键说明:

修改后的C#代码

using System.Diagnostics;
using System.Text.RegularExpressions;
using System.IO;

// 你的原有逻辑部分
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = @"C:\Program Files\7-Zip\7z.exe";
// 添加-bsp1参数让7-Zip仅输出简洁进度(核心优化)
p.Arguments = $"a -t7z \"{targetName}\" \"{item.ToString()}\" -mx=9 -bsp1";
p.WindowStyle = ProcessWindowStyle.Minimized;
// 开启输出重定向的必要配置
p.RedirectStandardOutput = true;
p.UseShellExecute = false;
p.CreateNoWindow = true; // 可选:完全隐藏7-Zip运行窗口

Process x = new Process();
x.StartInfo = p;

// 注册输出接收事件,过滤进度行
x.OutputDataReceived += (sender, e) =>
{
    if (!string.IsNullOrEmpty(e.Data))
    {
        // 匹配类似 "60% U Folder\thisisatext.txt" 的进度行
        if (Regex.IsMatch(e.Data, @"^\d+% U .+$"))
        {
            Console.WriteLine(e.Data); // 替换为你需要的处理逻辑,比如写入日志或更新UI
        }
    }
};

x.Start();
x.BeginOutputReadLine(); // 启动异步读取输出
x.WaitForExit();

// 安全判断:仅压缩成功时删除源文件夹
if (x.ExitCode == 0)
{
    Directory.Delete(Path.Combine(dirPath, item.Name), true);
}
else
{
    Console.WriteLine("压缩失败,已取消文件夹删除操作");
}

关键说明

  1. 7-Zip参数优化:添加-bsp1是最关键的一步,这是7-Zip官方提供的简洁进度输出参数,它会直接让7-Zip只输出你需要的进度行,从源头减少冗余信息。
  2. 输出重定向配置:RedirectStandardOutput = true和UseShellExecute = false是捕获进程输出的必要条件,CreateNoWindow = true可以彻底隐藏7-Zip的运行窗口(按需选择)。
  3. 进度行过滤:用正则表达式@"^\d+% U .+$"精准匹配进度行,若7-Zip的进度格式有细微变化,可随时调整正则规则适配。
  4. 安全删除逻辑:增加了ExitCode == 0的判断,只有当7-Zip压缩成功(退出码为0)时才删除源文件夹,避免压缩失败后误删文件。

内容的提问来源于stack exchange,提问作者MTn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:47:27