我假设你想要的是一个写入标准输出和一个文件的流。也就是说,你希望所有东西都能在控制台上显示出来,但是你也希望它被写入到一个文件中。 (如果你只是想将输出重定向到一个文件,你可以通过命令行来做到这一点。)
你需要创建自己的TextWriter
派生类,并让它做实际的输出。您致电Console.SetOut
使控制台写入您的TextWriter
。
class ConsoleLogger: TextWriter
{
private TextWriter ConsoleOutputStream;
private StreamWriter LogOutputStream;
public ConsoleLogger(string logFilename)
{
ConsoleOutputStream = Console.Out;
// Initialize your log file
LogOutputStream = new StreamWriter(logFilename);
}
public void Write(string s)
{
ConsoleOutputStream.Write(s);
LogOutputStream.Write(s);
}
// Other Write functions format their arguments and call Write(string).
}
而且在使用这个程序:
private ConsoleLogger MyLogger;
const string LogFilename = "ConsoleLog.txt";
void Main()
{
MyLogger = new ConsoleLogger(LogFilename);
Console.SetOut(MyLogger);
}
您不必重写所有的TextWriter
方法。正如documentation所述,“派生类必须最低限度地实现TextWriter.Write(Char)
方法来创建TextWriter
的有用实例。”
我已经做了类似的事情,它工作得很好。
还没有尝试过......但这听起来没错。标记为答案。谢谢! – aateeque