Как скопировать вывод консоли в программе на C#?

Как скопировать вывод консоли в программе на C#? Я хочу создать компилятор на WinForm. Моя программа запускает код (консольную программу file.exe) и мне необходимо получить вывод file.exe (сохранить в текстовый файл/перенаправить в консоль основного приложения и уже там скопировать/другие способы). Вывод программы file.exe я буду использовать как переменную в моей основной программе, которая запускает file.exe.

Сам код:

 private void button1_Click(object sender, EventArgs e)
 { 
   // код программы file.exe
     string code = "using System; " +
         " namespace test " +
         "{" +
         " public class Programm" +
         "{ " +
         "static void Main(string[] args) " +
         "{" +
         "Console.Write(88); " +
         "Console.ReadKey();" +
         "}} } ";
    // создаю компилятор
     CSharpCodeProvider provider = new CSharpCodeProvider(new Dictionary<string, string> { { "CompilerVerison", "v4.0"} }); 
     CompilerParameters  parameters = new CompilerParameters(new string[] {"mscorlib.dll", "System.Core.dll"}, "file.exe", true);
     parameters.GenerateExecutable = true;
     CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);

     if (results.Errors.HasErrors) 
     //проверяю, есть ли в коде ошибки (переменная code)
     {
         foreach(CompilerError error in results.Errors.Cast<CompilerError>()) {
             statusBox.Text += $"Line{error.Line}: {error.ErrorText}";
         }
     }
     else
     {
         statusBox.Text = "---Finished-\n";
       // запускаю программу file.exe, и из консоли этой программы мне нужно получить вывод
           Process.Start($"{Application.StartupPath}/{"file.exe"}"); 
     
     }
 }

Ответы (1 шт):

Автор решения: Имя
  1. в начале объявляешь массив и метод:

static List<string> ConsoleHistory = new List<string>(); static void Log(string message) { Console.WriteLine(message); ConsoleHistory.Add(message); }

  1. в консоль выводишь не через Console.WriteLine("Text"), а через Log("Text")
  2. В конце, когда нужно сохранить в файл, пишешь:

string outputFile = "filename.txt"; using (StreamWriter writer = new StreamWriter(outputFile)) { foreach (string line in ConsoleHistory) { writer.WriteLine(line); } }

Самый, пожалуй, лёгкий и костыльный способ, но рабочий)

→ Ссылка