c#中Process类的StandardInput问题

本文关键字:StandardInput 问题 类的 Process | 更新日期: 2023-09-27 18:21:19

我想使用--->Process myProcess=new Process()执行shell行;

这条线有点像:

 pathMyProgram -options < file.txt

我做过

Process pProcess = new System.Diagnostics.Process();
pProcess.StartInfo.FileName=pathMyProgram;
pProcess.StartInfo.Arguments=-optins < file.txt

但它不起作用(由于重定向…)

所以在阅读后,我尝试了

enter code here
Process pProcess = new System.Diagnostics.Process();
pProcess.StartInfo.FileName=pathMyProgram;
pProcess.StartInfo.Arguments=-optins 
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;
pProcess.Start();
pProcess.StandardInput.WriteLine(file.txt);

它继续不起作用,有什么帮助吗?

c#中Process类的StandardInput问题

您应该替换:

pProcess.StandardInput.WriteLine(file.txt);

比如:

try
{
    pProcess.StandardInput.Write(File.ReadAllText("file.txt"));
}
finally
{
    pProcess.StandardInput.Close();
}

这是假设您可以轻松地将整个文件读取到内存中。如果它是一个大文件,您将希望一次读取一行,并将其传递给

您是否考虑过使用"strings"

pProcess.StartInfo.FileName = "pathMyProgram";
pProcess.StartInfo.Arguments = "-optins < file.txt";

还要注意,您需要转义反斜杠,如下所示:

"C:''Path''To''Program.exe"

你应该更好地阅读一些C#初学者指南来掌握基本知识。(除非我遗漏了你问题的意思。)

不要混淆shell重定向和cmd.exe程序。他们看起来和行为相似,但仍然是不同的东西。像<>这样的参数是cmd.exe特有的。如果您将这些参数传递到流程中,它们将被直接传递,您需要手动解析它们。

请参阅此处的答案,特别是第2版和第3版。还可以在这里查看Raymond Chen的博客文章