如何将Console.WriteLine复制到文本文件?
static void ConsoleWrite(String value, ConsoleColor color)
{
Console.ForegroundColor = color;
FileStream ostrm;
StreamWriter writer;
TextWriter oldOut = Console.Out;
try
{
ostrm = new FileStream("./logfile.txt", FileMode.OpenOrCreate, FileAccess.Write);
writer = new StreamWriter(ostrm);
}
catch (Exception e)
{
Console.WriteLine("Cannot open logfile.txt for writing");
Console.WriteLine(e.Message);
return;
}
Console.SetOut(writer);
Console.SetError(writer);
Console.WriteLine(value.PadRight(Console.WindowWidth - 1));
Console.SetError(oldOut);
Console.SetOut(oldOut);
Console.WriteLine(value.PadRight(Console.WindowWidth - 1));
writer.Close();
ostrm.Close();
}
此代码仅写入最后一行。
(我需要在控制台中显示文本,同时将文本保存到文件中。)
ConsoleWrite("test1",ConsoleColor.Red);
ConsoleWrite("test2",ConsoleColor.Red);
ConsoleWrite("test3",ConsoleColor.Red);
在文件中只保存一行:“ test3 ”:(
答案 0 :(得分:3)
TextWriter
writers
)TextWriter
,将数据输出到writers
的每个实例new Foo(Console.Out, File.CreateText("Foo"))
)Console.SetOut(the_instance_of_your_textwriter)
答案 1 :(得分:2)
ostrm = new FileStream("./logfile.txt", FileMode.OpenOrCreate, FileAccess.Write);
您使用的是错误的FileMode。
OpenOrCreate会生成一个从文件开头开始的流。因此,您覆盖现有数据。每次调用此函数时,都会覆盖现有内容 - 这就是您只有最后一行的原因。
您想要使用FileMode.Append,如果文件存在则会打开该文件,如果不存在则创建它,重要的是将寻找文件的末尾,然后从那里开始编写。每次调用函数时,都会将数据添加到文件末尾。
答案 2 :(得分:2)
似乎FileMode.OpenOrCreate
将Position设置为0,因此每次打开文件时都会覆盖该文件。要快速解决问题,请使用FileMode.Append
。
但更易于维护的解决方案可能是使用像Log4Net这样的日志库。