我试图使用重定向Console.Out到两个文本文件Console.SetOut.
Console.SetOut(File.CreateText("c:\\del1.txt"));
Console.WriteLine(string1);
...
Console.SetOut(File.CreateText("c:\\del2.txt"));
Console.WriteLine(string2);
Run Code Online (Sandbox Code Playgroud)
通过此重定向,可以创建两个文本文件,而不包含任何数据.如果我注释掉第二个重定向,这工作正常.如何使用输出将输出重定向到不同的文件Console.SetOut.
Edit1:程序终止没有任何错误,这是否可以保证所有文件流都被关闭和刷新?
编辑2:感谢每一位回复了我的问题的人,我能够找到解决方案,不用更改代码并添加两行来关闭文件流.
Console.Out.Close();
任何人都可以解释为什么程序终止后文件流没有关闭和刷新?
正如Marc指出的那样,你需要不同的字符串到不同的文件.为什么不File.AppendAllText用于每次通话?
另外,您可以通过使用using构造来执行类似动态绑定的操作.
更新:
一个简单的动态绑定:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
用法(嵌套也适用):
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");
Run Code Online (Sandbox Code Playgroud)
这将打印到Console:
Real 1
Real 2
Run Code Online (Sandbox Code Playgroud)
它将附加到Foo.txt:
Moo
Bar
Run Code Online (Sandbox Code Playgroud)
它将附加到Bar.txt:
Ork
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2713 次 |
| 最近记录: |