【问题标题】:Copy all lines of a console app screen to text file将控制台应用程序屏幕的所有行复制到文本文件
【发布时间】:2016-10-04 10:16:32
【问题描述】:

我有一个控制台应用程序,它通过Console.Writeline 将大量日志记录到屏幕上。

将每个Console.Writeline 转换为文件写入,或将每个console.Writeline 缓冲为StringBuilder

有没有办法在应用程序运行到最后时将控制台屏幕行的完整转储到文本文件?

【问题讨论】:

  • 简单方法:application.exe >>log.txt
  • 您可以创建一个字符串列表,当您通过Console.Writeline 写入控制台时,在此行之后您还将它添加到列表中,并且在程序末尾您会得到一个列表您现在可以在程序末尾编写的所有输出。
  • @Cal-cium 仍然需要我检查整个代码并向每个 console.writeline 添加更多代码

标签: c# logging console


【解决方案1】:

您可以:

1- 将 Console.WriteLine 重定向到文件:

System.IO.FileStream fs = new System.IO.FileStream(@"C:\Output.txt", System.IO.FileMode.Create);
System.IO.StreamWriter sw = new System.IO.StreamWriter(fs);
System.Console.SetOut(sw);

(PS。如果你这样做了,不要忘记在程序终止之前将控制台输出设置回来并关闭流)

2- 运行可执行文件时,将输出定向到文件,例如:

C:\>MyExecutable.exe > C:\Output.txt

【讨论】:

  • 第二个选项是最简单的。无需修改代码
【解决方案2】:
  FileStream ostrm;
            StreamWriter writer;
            TextWriter oldOut = Console.Out;
            try
            {
                ostrm = new FileStream("./Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
                writer = new StreamWriter(ostrm);
            }
            catch (Exception e)
            {
                Console.WriteLine("Cannot open Redirect.txt for writing");
                Console.WriteLine(e.Message);
                return;
            }
            Console.SetOut(writer);
            Console.WriteLine("This is a line of text");
            Console.WriteLine("Everything written to Console.Write() or");
            Console.WriteLine("Console.WriteLine() will be written to a file");
            Console.SetOut(oldOut);
            writer.Close();
            ostrm.Close();
            Console.WriteLine("Done");

使用可以使用Console.SetOut()设置输出

很好的例子:http://www.java2s.com/Code/CSharp/Development-Class/DemonstratesredirectingtheConsoleoutputtoafile.htm

【讨论】:

  • 这基本上归结为一一写屏幕日志。这就是我要避免的
  • 这需要我到处搜索Console.Writeline,然后添加Console.SetOut
  • @CharlesOkwuagwu,不,您不必搜索所有 Console.Writeline 并添加 Console.SetOut。将其添加到 main 或 global
  • 哦好的,所以我只需要一次 Console.setOut
  • @CharlesOkwuagwu,是的,你是对的。请参阅链接以获取不错的示例
猜你喜欢
  • 2011-04-22
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多