NullStream,定义为“没有后备存储的流”。所有的方法什么都不做或什么也不返回。它是Stream 的内部类。以下代码取自微软的源代码。
基本上,当第一次调用Console 写入方法之一时,会调用Windows API 函数GetStdHandle 以获取“标准输出”。如果没有返回句柄,则创建并使用 NullStream。
Samuel 的回答是正确的,并提供了一般信息。要实际重定向控制台输出,无论项目类型如何,请使用Console.SetOut(New System.IO.StreamWriter("C:\ConsoleOutput.txt")),这是一个简单的示例。
将控制台、调试和跟踪定向到文件
直接回答您的问题。使用ConsoleTraceListener 和StreamWriter 将所有三个输出定向到一个文件。我仅将以下内容用于开发。
Dim oLogFile As New System.IO.StreamWriter("C:\ConsoleOutput.txt")
oLogFile.AutoFlush = True 'so we do not have to worry about flushing before application exit
Console.SetOut(oLogFile)
'note, writing to debug and trace causes output on console, so you will get double output in log file
Dim oListener As New ConsoleTraceListener
Debug.Listeners.Add(oListener)
Trace.Listeners.Add(oListener)
空流
[Serializable]
private sealed class NullStream : Stream {
internal NullStream() { }
public override bool CanRead {
get { return true; }
}
public override bool CanWrite {
get { return true; }
}
public override bool CanSeek {
get { return true; }
}
public override long Length {
get { return 0; }
}
public override long Position {
get { return 0; }
set { }
}
// No need to override Close
public override void Flush() {
}
public override int Read([In, Out] byte[] buffer, int offset, int count) {
return 0;
}
public override int ReadByte() {
return -1;
}
public override void Write(byte[] buffer, int offset, int count) {
}
public override void WriteByte(byte value) {
}
public override long Seek(long offset, SeekOrigin origin) {
return 0;
}
public override void SetLength(long length) {
}
}