2011-08-29 36 views
0

我需要捕獲三個進程的輸出並將其作爲StreamReader傳遞。這在C#中可能嗎?將多個進程的輸出連接到StreamReader

背景:我需要三個不同參數的另一個文件的輸出,但我希望將我的代碼中後面處理的「完整」輸出(全部三個)一起對待。

我應該只是調用過程三次並在循環中處理輸出?還是有更高效的方法?

目前,我正在做這樣的

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

但我需要兩個COUNTRY_XX -groups從 「DSGET」。

回答

1

除了三次調用這個過程外,沒有別的辦法了。但是,您始終可以將進程調用代碼放入一個接受參數的方法中,作爲輸入添加返回進程輸出,因此您不必重複代碼。例如,

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

其中InvokeProcess或多或少是您已經提供的代碼。

+0

@ ApoY2K,這取決於實際的可執行文件 - 大多數命令行程序完成他們的工作,然後退出。所以你沒有退出。當過程完成時,'Process'類給出事件。它也提供了「殺死」這個過程的方法。在你的用例中,你可能會發現'WaitForExit'方法有用。 – VinayC