将C输出转换为C#输入

时间:2009-07-01 21:29:23

标签: c# c pipe

我目前正在尝试开发一个程序,它接受现有程序的输出(用C语言编写)并将其用作输入(在C#中)。我遇到的问题是现有程序以冗余格式打印数据,但它会动态更改。一个例子可能是随机名称生成器,我需要创建一个程序,记录出现的所有随机名称。

我可以直接管道,输出会被抓住吗? C程序从CLI运行。

2 个答案:

答案 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程序的输出。

相关问题