0

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

或者换句话说:

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

我问了一个关于如何读取控制台缓冲区的问题(这里:How to read Console buffer in VBNET?),因为我想象缓冲区将包含所有“合并”在一起的输出,因此我可以检索所有标准输出或错误输出或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 进程,所以如果我使用一种技术来读取启动进程的控制台缓冲区,我将能够从缓冲区中检索标准和错误输出?缓冲区将存储进程的所有输出?

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

4

1 回答 1

1

您可以使用Console.SetOutandConsole.Out将缓冲区重定向到流。然后你可以用它做任何你需要的事情。

Console.SetOut 方法

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

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

如何将控制台的输出重定向到 C# 中的文本框

于 2013-10-17T07:18:08.607 回答