C#中Process类的StandardInput问题

时间:2012-01-25 16:33:43

标签: c# redirect

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

该行类似于:

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

它继续没有工作,有任何帮助吗?

3 个答案:

答案 0 :(得分:1)

你应该替换:

pProcess.StandardInput.WriteLine(file.txt);

有类似的东西:

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

假设您可以轻松地将整个文件读入内存。如果它是一个大文件,你需要一次读一行并将其传递给

答案 1 :(得分:0)

您考虑使用"strings"吗?

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

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

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

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

答案 2 :(得分:0)

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

请参阅answer here,特别是编辑2和3.还要结帐Raymond Chen's blog post on it here