作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Console.SetOut
将 Console.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/
我是一名优秀的程序员,十分优秀!