gpt4 book ai didi

c# - 如何将我们在控制台窗口上的操作保存到文本文件中?

转载 作者:太空狗 更新时间:2023-10-29 21:46:08 25 4
gpt4 key购买 nike

如果我们编译以下代码并运行生成的应用程序,我们将通过输入我们的名字,按回车键,然后按任意键退出来与之交互。所有这些操作都在控制台窗口中完成。

using System;

namespace HelloWorld
{
class Program
{

static void Main(string[] args)
{
Console.Write("Enter your name: ");
var name = Console.ReadLine();
Console.WriteLine("Your name is {0} ", name);
Console.ReadKey();

}
}
}

是否可以将所有这些操作保存到一个文本文件中,以便我可以将其用作日志?

编辑:

我应该解释真实的场景。我正在写一本关于 C# 的书。我想避免将控制台窗口的屏幕截图附加到书中,因为我想让我的书的文件大小尽可能小。相反,我想将显示控制台窗口内容的文本文件附加到书中。添加额外的代码(用于创建文本文件)会使代码示例复杂化,这反过来会使读者感到困惑。

最佳答案

好的,所以这里的想法是更改控制台输入和输出的读取器/写入器以执行它们之前所做的操作,但也写入日志文件。我创建了一个 Log 类,它可能应该被扩展,以便将文件名/路径作为参数,但重要的是要有一个这样的输出流可以同步。

public class Log
{
private StreamWriter output;
public Log()
{
output = new StreamWriter(File.OpenWrite("output.txt"));

}
public void Write(char c)
{
lock (output)
{
output.Write(c);
}
}
public void Close()
{
output.Close();
}
}

public class MyConsoleOutput : TextWriter
{
private TextWriter standard;
private Log log;

public MyConsoleOutput(TextWriter standard, Log log)
{
this.standard = standard;
this.log = log;
}

public override void Write(char value)
{
standard.Write(value);
log.Write(value);
}

public override Encoding Encoding
{
get { return Encoding.Default; }
}

protected override void Dispose(bool disposing)
{
standard.Dispose();
}
}

public class MyConsoleInput : TextReader
{
private TextReader standard;
private Log log;
public MyConsoleInput(TextReader standard, Log log)
{
this.standard = standard;
this.log = log;
}

public override int Peek()
{
return standard.Peek();
}


public override int Read()
{
int result = standard.Read();
log.Write((char)result);
return result;
}
protected override void Dispose(bool disposing)
{
standard.Dispose();
}
}

现在我们已经创建了这些类,我们将在 Main 的开头执行以下操作:

Log log = new Log();
Console.SetOut(new MyConsoleOutput(Console.Out, log));
Console.SetIn(new MyConsoleInput(Console.In, log));

我们还需要在 Main 的末尾使用它:

log.Close();

这是一个有点快速和肮脏的写作。如果您在生产中使用它,您可能需要更改很多类/方法名称。

关于c# - 如何将我们在控制台窗口上的操作保存到文本文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com