需要关于控制台缓冲区和控制台输出的声明

时间:2013-10-17 07:14:07

标签: c# .net vb.net console buffer

当使用API​​技术在.NET中使用'ReadConsoleOutput'函数检索控制台缓冲区时,这意味着我可以在同一输出(缓冲区)中使用标准输出,输入输出和错误输出吗? / p>

或换句话说:

如果我们通常需要通过将StandrdOutput / ErrorOutput / InputOutput输出分成总共3个输出来启动进程并重定向,那么如果我们使用一种技术来读取控制台缓冲区而不是重定向3个输出,那么我们可以使用输出到缓冲区strean中的一体化输出?

我问了一个关于如何读取控制台缓冲区的问题(这里:How to read Console buffer in VBNET?),因为我已经想到缓冲区会包含所有那些“合并”的输出,所以我可以检索所有的standardOutput或ErrorOutput或InputOutput进入缓冲区流,无需通过分隔重定向任何输出。

控制台缓冲区包含所有合并的输出(所有的东西都是用控制台编写的,没有例外)或只有一个输出?

所以,如果我错了或不知道我说过的话,我想知道什么。

  

更新:

更好的例子可能是,如果我有这个过程,我不会重定向任何输出:

Private Shared Process_Without_Redirect As New Process() With { _
.StartInfo = New ProcessStartInfo With { _
            .CreateNoWindow = True, _
            .UseShellExecute = False, _
            .RedirectStandardInput = False, _
            .RedirectStandardError = False, _
            .RedirectStandardOutput = False _
}}

...进程是一个CLI进程,所以如果我使用一种技术来读取已启动进程的控制台缓冲区,我将能够从缓冲区中检索标准和错误输出吗?缓冲区将存储进程的所有输出?

启动的进程写入控制台的所有内容都将存储到缓冲区中?所以我可以检索写入一体化输出的缓冲区,而不是重定向和读取每个进程输出?

1 个答案:

答案 0 :(得分:1)

您可以使用Console.SetOutConsole.Out将缓冲区重定向到流。 然后你可以随心所欲地做任何事情。

Console.SetOut Method

Console.WriteLine("Hello World");
FileStream fs = new FileStream("Test.txt", FileMode.Create);
// First, save the standard output.
TextWriter tmp = Console.Out;
StreamWriter sw = new StreamWriter(fs);
Console.SetOut(sw);
Console.WriteLine("Hello file");
Console.SetOut(tmp);
Console.WriteLine("Hello World");
sw.Close();

另一个例子。如何将控制台输出重定向到文本框:

How to redirect the Console’s output to a TextBox in C#