gpt4 book ai didi

c# - 将 Console.Out 写入不同的输出文件

转载 作者:行者123 更新时间:2023-11-30 13:13:41 25 4
gpt4 key购买 nike

我正在尝试使用 Console.SetOutConsole.Out 重定向到两个文本文件。

Console.SetOut(File.CreateText("c:\\del1.txt"));
Console.WriteLine(string1);
...
Console.SetOut(File.CreateText("c:\\del2.txt"));
Console.WriteLine(string2);

通过这种重定向,创建了两个没有任何数据的文本文件。如果我注释掉第二次重定向,这很好用。如何使用 Console.SetOut 将输出重定向到不同的文件。

Edit1:程序终止且没有任何错误,这能保证所有文件流都关闭并刷新吗?

编辑2:感谢所有回答我的问题的人,我能够找到解决方案而无需更改代码并添加两行额外的行来关闭文件流。 Console.Out.Close();

谁能解释为什么文件流在程序终止后没有关闭和刷新?

最佳答案

正如 Marc 所指出的,您希望不同的文件具有不同的字符串。为什么不在每次调用时都使用 File.AppendAllText

或者,您可以通过使用 using 构造来执行动态绑定(bind)之类的操作。

更新:

一个简单的动态绑定(bind):

class DynamicConsole : TextWriter
{
readonly TextWriter orig;
readonly TextWriter output;

public DynamicConsole(string filename)
{
orig = Console.Out;
output = File.AppendText(filename);
Console.SetOut(output);
}

public override System.Text.Encoding Encoding
{
get { return output.Encoding; }
}

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

protected override void Dispose(bool disposing)
{
Console.SetOut(orig);
output.Dispose();
}
}

用法(也可以嵌套):

Console.WriteLine("Real 1");

using (new DynamicConsole("Foo.txt"))
{
Console.WriteLine("Moo");

using (new DynamicConsole("Bar.txt"))
{
Console.WriteLine("Ork");
}

Console.WriteLine("Bar");
}

Console.WriteLine("Real 2");

这将打印到控制台:

Real 1
Real 2

它将附加到 Foo.txt:

Moo
Bar

它将附加到 Bar.txt:

Ork

关于c# - 将 Console.Out 写入不同的输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4873372/

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