我目前正在尝试开发一个程序,它接受现有程序的输出(用C语言编写)并将其用作输入(在C#中)。我遇到的问题是现有程序以冗余格式打印数据,但它会动态更改。一个例子可能是随机名称生成器,我需要创建一个程序,记录出现的所有随机名称。
我可以直接管道,输出会被抓住吗? C程序从CLI运行。
答案 0 :(得分:3)
您可以重定向Process对象的输出流以直接访问它。您拨打电话,它会在收到输出时调用您选择的事件。我的一个问题可能会提供一些解释 - C# Shell - IO redirection
:
processObject.StartInfo.RedirectStandardOutput = true;
processObject.OutputDataReceived += new DataReceivedEventHandler(processObject_OutputDataReceived);
/* ... */
processObject.Start();
processObject.BeginOutputReadLine();
然后是:
public void processObject_OutputDataReceived(object sender, DataReceivedEventArgs e) {
ProcessNewData(e.Data);
}
请注意,这包括尾随换行符。
或者你可以管它并使用Console.ReadLine
来读取它。在命令行中,你将执行:
cprogram | csharp_program
不幸的是,你无法直接使用Process对象 - 只需使用上面的方法。如果您选择使用此路线,则可以使用:
string input = "";
int currentChar = 0;
while ( (currentChar = Console.Read()) > -1 ) {
input += Convert.ToChar(currentChar);
}
将从输入读取,直到EOF。
答案 1 :(得分:0)
如果C#程序也是基于命令行的,那么从命令行运行此命令会将它们链接在一起:
my_c_program.exe | my_csharp_program.exe
C#程序将通过其标准输入流(Console.Read
等)接收C程序的输出。