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

本文关键字:控制台 输出 声明 缓冲区 | 更新日期: 2023-09-27 18:35:53

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

或者换句话说:

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

我问了一个关于如何读取控制台缓冲区的问题(这里:如何在 VBNET 中读取控制台缓冲区?),因为我想象缓冲区将包含所有这些"合并"在一起的输出,这样我就可以将所有标准输出或错误输出或输入输出检索到缓冲区流中,而无需通过分离重定向任何输出。

控制台缓冲区包含合并的所有输出(所有写入控制台的内容,无一例外)还是只有一个输出?

所以,我想知道我说的话是错的还是错的。

更新:

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

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

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

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

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

您可以使用

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

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

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