Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Diagnostics.Process.Start()参数dotnet和diff_C#_.net_Diff - Fatal编程技术网

C# System.Diagnostics.Process.Start()参数dotnet和diff

C# System.Diagnostics.Process.Start()参数dotnet和diff,c#,.net,diff,C#,.net,Diff,尝试处理diff命令时出错: diff: extra operand `>' 无论平台如何,错误都是相同的(在windows下,我使用的是choco diffutils) 之所以会出现这种情况,是因为>不是命令参数的一部分,而是标准输出重定向操作数,它不是由进程本身处理的,而是由启动进程的操作系统处理的 当通过代码启动流程时,我们需要自己处理 以下是一个在windows上工作的解决方案: var cmd = "diff"; //if ran under windows is the ch

尝试处理diff命令时出错:

diff: extra operand `>'
无论平台如何,错误都是相同的(在windows下,我使用的是choco diffutils)


之所以会出现这种情况,是因为>不是命令参数的一部分,而是标准输出重定向操作数,它不是由进程本身处理的,而是由启动进程的操作系统处理的

当通过代码启动流程时,我们需要自己处理

以下是一个在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:

拥有这两个文件(old.txt和new.txt)

输出(diff.txt)如下所示:

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

谢谢@oguz,您的解决方案非常有效!更重要的是,您解释了问题的根源,因此这适用于任何涉及标准输出的工作流。不客气。如果您愿意,也可以接受作为解决方案。还有一个我看到人们使用的替代方法,那就是启动一个shell(cmd.exe)并用命令行提供其标准输入,包括可执行文件和它的参数(然后还可以传递>diff.txt)。我不知道这是否值得,因为我们有这个解决方案。我尝试了替代方案,而且效果也很好!我坚持第一种解决方案,因为这样代码看起来更流畅。再次感谢。我说“完美工作”的时间太早了。我肯定是在输出一个文件方面工作的,但是发生了一些奇怪的事情,我试图弄清楚它是否与diff.exe有关。字符串o=p.StandardOutput.ReadToEnd();将整个输出包装在八个单引号中(开头4个,结尾4个),如下所示:。如果你知道类似的事情,请告诉我。同样,这似乎是完全无关的,但我想先由您运行它。好的,我发现我的代码有问题。。。diff(行组格式)的文档显示了单引号,例如“%”
   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
Line 1 - def
Line 1 - def
Line 1 - def
Line 1 - def