Как скопировать вывод консоли в программе на 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 шт):
- в начале объявляешь массив и метод:
static List<string> ConsoleHistory = new List<string>(); static void Log(string message) { Console.WriteLine(message); ConsoleHistory.Add(message); }
- в консоль выводишь не через Console.WriteLine("Text"), а через Log("Text")
- В конце, когда нужно сохранить в файл, пишешь:
string outputFile = "filename.txt"; using (StreamWriter writer = new StreamWriter(outputFile)) { foreach (string line in ConsoleHistory) { writer.WriteLine(line); } }
Самый, пожалуй, лёгкий и костыльный способ, но рабочий)