当使用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进程,所以如果我使用一种技术来读取已启动进程的控制台缓冲区,我将能够从缓冲区中检索标准和错误输出吗?缓冲区将存储进程的所有输出?
启动的进程写入控制台的所有内容都将存储到缓冲区中?所以我可以检索写入一体化输出的缓冲区,而不是重定向和读取每个进程输出?
答案 0 :(得分:1)
您可以使用Console.SetOut
和Console.Out
将缓冲区重定向到流。
然后你可以随心所欲地做任何事情。
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();
另一个例子。如何将控制台输出重定向到文本框: