如何在控制台应用程序中隐藏输出(而不是窗口)?
好吧,让我再说清楚。 我有一个包含许多类的控制台应用程序,在每个类中至少有一个Console.WriteLine(“text”)行。 我定义了一些参数,在运行应用程序时,它输出的正是我在类中编写的内容。 在那里,我想定义一个参数,当我使用此参数运行应用程序时,控制台屏幕上将没有输出但控制台窗口仍然出现。 这个论点可能就像“-s”。 那么,如果不在每个类中使用“if”条件并通过类传递参数,我能做到这一点吗? 非常感谢。
P / S:我通过互联网搜索并发现了一些与此相关的文章,但大多数答案是隐藏控制台窗口。 我认为这个问题应该是其他人的意思。
使用Console.SetOut( http://msdn.microsoft.com/en-us/library/system.console.setout.aspx )并传入“null”文本编写器。 -s
上的想法执行Console.SetOut(new StreamWriter())
。
Console.SetOut
方法的示例将帮助您入门。
此外,您可以使用此方法轻松添加日志记录。
使用这些方法重定向输出(以编程方式):
Console.SetIn(...); Console.SetOut(...); Console.SetError(...);
app.exe > nul
将输出重定向到无处。 仅供参考: 使用命令重定向运算符
如果直接传递null
则Console.SetOut
方法抛出ArgumentNullException
; 对于StreamWriter
(如果您传递流或者传递字符串 。
我使用的是将特殊的Stream.Null
字段传递给StreamWriter
:
System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null);
这将流重定向到本质上为空设备(* NIX机器上的/dev/null
)。
您是否遇到过Console.Clear() ,您可以通过一种方式调用它,使其看起来根本没有输出任何文本。
至于避免在每个类中单独定义它,你应该看看inheritance。 这允许您在一个地方定义function,每个“子”类将inheritance此function。
您可以使用log4net来定义要记录的项目。 它允许您记录有关日志级别,关于要记录的类等的日志。
这对我来说效果很好!:
Console.SetOut(StreamWriter.Null); Console.SetError(StreamWriter.Null);
这不起作用:
Console.SetOut(null); Console.SetError(null);
它会导致ArgumentNullException
。
这不起作用:
Console.SetOut(new StreamWriter(null)); Console.SetError(new StreamWriter(null));
因为new StreamWriter(string path)
和new StreamWriter(Stream stream)
之间不明确。
最后 ,这些都不起作用:
Console.SetOut(new StreamWriter(default(string))); Console.SetError(new StreamWriter(default(Stream)));
因为它们也会导致ArgumentNullException
。