Объединить вывод нескольких процессов в StreamReader - PullRequest
0 голосов
/ 29 августа 2011

Мне нужно захватить выходные данные трех процессов и передать их как 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());
}

Но мне нужны еще две COUNTRY_XX -группы из "dsget".

1 Ответ

1 голос
/ 29 августа 2011

Нет другого способа, кроме как вызвать процесс три раза.Но вы всегда можете поместить код вызова процесса в метод, который принимает аргумент в качестве входных данных. Add возвращает результат процесса, поэтому вам не нужно повторять код.Например,

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

, где InvokeProcess - это более или менее код, который вы уже дали.

...