将多个进程的输出连接到StreamReader

时间:2011-08-29 08:26:58

标签: c# process outputstream

我需要捕获三个进程的输出并将其作为StreamReader传递。这在C#中是否可行?

背景:我需要另外一个带有三个不同参数的文件的输出,但是我想把“完整”输出(全部三个一起)对待我的代码中的后一个处理。

我应该只调用该过程三次并在循环中处理输出吗?还是有更有效的方式?

目前,我正在这样做

if (String.IsNullOrEmpty(file))
{
    Process dsget;
    dsget = Process.Start("dsget", "group \"CN=COUNTRY_DE,DC=cms,DC=local\" -members");
    dsget.StartInfo.UseShellExecute = false;
    dsget.StartInfo.RedirectStandardOutput = true;
    dsget.Start();
    reader = dsget.StandardOutput;
}
else 
{
    reader = new StreamReader(file);
}
while ((line = reader.ReadLine()) != null)
{
    if (!line.Contains("CN"))
        continue;
    string username = line.Replace("\"", "").Split(',')[0].Split('=')[1];
    countryUsers.Add(username.ToUpperInvariant());
}

但我还需要两个来自“dsget”的COUNTRY_XX - 组。

1 个答案:

答案 0 :(得分:1)

没有其他方法可以将该过程调用三次。但是你总是可以将进程调用代码放入一个接受参数作为输入的方法中添加返回进程输出,这样你就不必重复代码了。例如,

var info = new StringBuilder();
info.Append(InvokeProcess(argument1));
info.Append(InvokeProcess(argument2));
info.Append(InvokeProcess(argument3));

其中InvokeProcess或多或少是你已经给出的代码。