Можно ли как-то минимизировать 7-почтовый выход / войти в систему C#? - PullRequest
3 голосов
/ 30 января 2020

Я использую этот код для сжатия папок:

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);

Когда приложение компилируется, я получаю такой вывод:

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

Но мне нужно только это: 60% U Folder\thisisatext.txt Может Я делаю это как-то? Спасибо за любой ответ.

1 Ответ

3 голосов
/ 30 января 2020

Если вы установите перенаправление стандартного вывода вашего процесса, например, так:

p.RedirectStandardOutput = true;

( Подробнее об этом здесь )

Затем вы можете прочитать вывод 7 Zips в потоковом считывателе:

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

Теперь, когда выходные данные ваших программ хранятся в строке, вы можете получить обратно свое 60% -ое значение. Если это всегда последняя строка вывода, вы можете использовать Linq , чтобы получить ее:

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

В этом случае мы разбиваем строки вывода на массив .Split('\n') затем выбрав последнюю строку .Last(). Затем мы удаляем все пробелы, которые могут быть до или после строки, используя .Trim().

...