Аргументы System.Diagnostics.Process.Start () делают tnet и diff - PullRequest
1 голос
/ 19 апреля 2020

При попытке обработать команду diff выдает ошибку:

diff: extra operand `>'

Ошибка одинакова независимо от платформы (под windows, я использую choco diffutils).

var cmd = "diff" //if ran under windows is the choco path: C:\\ProgramData\\chocolatey\\bin\\diff.exe
var args = "--unchanged-group-format='' --old-group-format='' --changed-group-format='%>' --new-group-format='' old.txt new.txt > diff.txt"
var p = System.Diagnostics.Process.Start(cmd, args)
p.WaitForExit()

1 Ответ

2 голосов
/ 19 апреля 2020

Это происходит потому, что> не является частью аргументов команды, а является стандартным операндом перенаправления вывода, который обрабатывается не самим процессом, а ОС, запускающей процесс.

При запуске процесса с помощью кода нам нужно разобраться с этим самим.

Вот решение, работающее с windows:

var cmd = "diff"; //if ran under windows is the choco path: C:\\ProgramData\\chocolatey\\bin\\diff.exe
var args = "--unchanged-group-format=\"\" --old-group-format=\"\" --changed-group-format=\"%>\" --new-group-format=\"\" old.txt new.txt";

var p = new Process();

p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = cmd;
p.StartInfo.Arguments = args;
p.StartInfo.RedirectStandardOutput = true;

p.Start();

using (var outputFile = File.OpenWrite("diff.txt"))
{
    p.StandardOutput.BaseStream.CopyTo(outputFile);
}

p.WaitForExit();

РЕДАКТИРОВАТЬ 1:

Наличие этих двух файлов (старых. txt и new.txt)

   old.txt             new.txt
Line 1 - abc        Line 1 - def
Line 2 - def        Line 2 - def
Line 1 - abc        Line 1 - def
Line 2 - def        Line 2 - def

Вывод (diff.txt) выглядит следующим образом:

Line 1 - def
Line 1 - def
Line 1 - def
Line 1 - def
...