C# - 有没有办法在代码末尾复制控制台内容并保存到文件,并在代码为 运行 时将其显示在控制台上?
C# - Is there way to copy Console Content and save to file at the end of code as well as have it show up on Console while code is running?
我想在我的代码执行完毕后将控制台输出的所有内容保存到 .txt 文件中。我已经尝试了一些像下面这样的东西并且它有效但是当代码是 运行 时,控制台是空白的并且内容被重定向到文件。我希望它同时或在代码末尾显示在控制台和文件上。请尝试看看您是否有更好的方法来做到这一点。
//Saving Console output to file
Console.WriteLine("Please Enter File Name: \n");
string fileName = Console.ReadLine();
string filePath = @"C:\Desktop\Log.txt";
FileStream filestream = new FileStream(filePath, FileMode.Create);
var streamwriter = new StreamWriter(filestream);
streamwriter.AutoFlush = true;
Console.SetOut(streamwriter);
Console.SetError(streamwriter);
我假设每当您编写 Console.WriteLine()
时,您都希望将该消息发送到文本文件,并且还可以选择发送到终端屏幕。
因此,请创建您自己的方法来做到这一点。
static void PrintMessage(string message)
{
// if you want to print to the screen
Console.WriteLine(message);
// if you want to write to a file
// note, there are more efficient ways to do this
File.AppendAllText(SomeFilePath, message);
// if you want more "sinks", then add more here
}
现在,在您的程序中,不是调用 Console.WriteLine
,而是调用 PrintMessage
。
这个答案显示了基本原理。一旦你理解了,那么你可以对 Serilog 和其他日志库进行一些研究。
A @gunr2171 指出,有类似 Serilog 和 NLog 这样的库,您可以配置它们来记录两者。正确的方法取决于项目的范围。如果您正在编写即将投入生产的内容,请使用这些库之一。如果这只是一个 personal/school 项目,你可以做一些简单的事情,比如一个 Log 方法,它可以像这样:
public class MyClass
{
StringBuilder log = new StringBuilder();
private void Log(string msg)
{
Console.WriteLine(msg);
this.log.AppendLine(msg);
}
~MyClass() => System.IO.File.AppendAllText("Path\To\File", log.ToString());
}
我想在我的代码执行完毕后将控制台输出的所有内容保存到 .txt 文件中。我已经尝试了一些像下面这样的东西并且它有效但是当代码是 运行 时,控制台是空白的并且内容被重定向到文件。我希望它同时或在代码末尾显示在控制台和文件上。请尝试看看您是否有更好的方法来做到这一点。
//Saving Console output to file
Console.WriteLine("Please Enter File Name: \n");
string fileName = Console.ReadLine();
string filePath = @"C:\Desktop\Log.txt";
FileStream filestream = new FileStream(filePath, FileMode.Create);
var streamwriter = new StreamWriter(filestream);
streamwriter.AutoFlush = true;
Console.SetOut(streamwriter);
Console.SetError(streamwriter);
我假设每当您编写 Console.WriteLine()
时,您都希望将该消息发送到文本文件,并且还可以选择发送到终端屏幕。
因此,请创建您自己的方法来做到这一点。
static void PrintMessage(string message)
{
// if you want to print to the screen
Console.WriteLine(message);
// if you want to write to a file
// note, there are more efficient ways to do this
File.AppendAllText(SomeFilePath, message);
// if you want more "sinks", then add more here
}
现在,在您的程序中,不是调用 Console.WriteLine
,而是调用 PrintMessage
。
这个答案显示了基本原理。一旦你理解了,那么你可以对 Serilog 和其他日志库进行一些研究。
A @gunr2171 指出,有类似 Serilog 和 NLog 这样的库,您可以配置它们来记录两者。正确的方法取决于项目的范围。如果您正在编写即将投入生产的内容,请使用这些库之一。如果这只是一个 personal/school 项目,你可以做一些简单的事情,比如一个 Log 方法,它可以像这样:
public class MyClass
{
StringBuilder log = new StringBuilder();
private void Log(string msg)
{
Console.WriteLine(msg);
this.log.AppendLine(msg);
}
~MyClass() => System.IO.File.AppendAllText("Path\To\File", log.ToString());
}