简体   繁体   English

我可以以某种方式最小化 C# 中的 7-zip 输出/日志吗?

[英]Can I minimize somehow the 7-zip output/log in C#?

I am using this code to compress folders:我正在使用此代码来压缩文件夹:

ProcessStartInfo p = new ProcessStartInfo();
                        p.FileName = @"C:\Program Files\7-Zip\7z.exe";
                        p.Arguments = "a -t7z \"" + targetName + "\" \"" + item.ToString() + "\" -mx=9";
                        p.WindowStyle = ProcessWindowStyle.Minimized;
                        Process x = Process.Start(p);
                        x.WaitForExit();
                        Directory.Delete(dirPath + "\\" + item.Name, true);

When the app is compiling I get this output:当应用程序编译时,我得到这个输出:

7-Zip 19.00 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Open archive: C:\a\b\folders\compress.7z
--
Path = C:\a\b\folders\compress.7z
Type = 7z
Physical Size = 881619
Headers Size = 273
Method = LZMA2:23
Solid = +
Blocks = 1

    Scanning the drive:
    1 folder, 2 files, 8258668 bytes (8066 KiB)

    Updating archive: C:\a\b\folders\compress.7z

    Add new data to archive: 1 folder, 2 files, 8258668 bytes (8066 KiB)

     60% U Folder\thisisatext.txt

But I only want this: 60% U Folder\\thisisatext.txt Can I do this somehow?但我只想要这个: 60% U Folder\\thisisatext.txt我能以某种方式做到这一点吗? Thanks for any response.感谢您的任何回应。

If you set your process's standard output to redirect, like so:如果您将流程的标准输出设置为重定向,如下所示:

p.RedirectStandardOutput = true;

( read more about this here ) 在此处阅读更多相关信息

You can then read 7 Zips output into a stream reader:然后,您可以将 7 个 Zips 输出读入流阅读器:

var reader = x.StandardOutput;
var output = reader.ReadToEnd();

Now that your programs output is stored in a string you can get your 60% value back.现在您的程序输出存储在一个字符串中,您可以取回 60% 的值。 If it is always the last line of the output you could use Linq to get it:如果它始终是输出的最后一行,您可以使用Linq来获取它:

var lastLine = output.Split('\n').Last().Trim();
Console.WriteLine(lastLine); // 60% U Folder\\thisisatext.txt"

In this case, we are splitting the lines of the output into an array .Split('\\n') then selecting the last line .Last() .在这种情况下,我们将输出的行拆分为数组.Split('\\n')然后选择最后一行.Last() We then remove any whitespace that might be before or after the string using .Trim() .然后我们使用.Trim()删除可能在字符串之前或之后的任何空格。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM