我在运行控制台应用程序时将统计信息发送到控制台窗口。我想定期将控制台的内容刷新到文本文件,以及程序何时以及是否关闭。我认为console.out.writeline()可以工作,但它不会产生值。我无法跟踪写入控制台窗口的所有内容,因此基本上每隔6小时后我就会将当时显示的所有内容写入文本文件。只是想知道这是否可能。提前谢谢。
答案 0 :(得分:2)
考虑到所有事情,你最好使用会记录到控制台和文件的东西。因此,不是调用Console.WriteLine
,而是调用Logger.WriteLine
,而是写入两者。
你可以从控制台读取并写入文件,但这有点困难并且它并不完美。控制台屏幕缓冲区只能容纳这么多。如果您输出大量数据,其中一些数据将被推出缓冲区。
您可以通过更改控制台窗口的属性来设置屏幕缓冲区的大小。
如果要从控制台读取数据,则必须读取控制台屏幕缓冲区。 .NET Console
类不提供对它的访问。您最终必须调用Windows API函数来执行此操作。
我在几年前开发了一些关于使用.NET的Console API的文章。不幸的是,发布这些文章的网站已不再在线。但是代码可以在http://www.mischel.com/pubs/consoledotnet.zip获得。
如果要使用该代码获取控制台的内容,请执行以下操作:
Get the active console screen buffer by calling JConsole.GetActiveScreenBuffer
Call GetScreenBufferInfo to get the size of the screen buffer
Call ReadBlock to read as much of the buffer as you want
这将返回一个ConsoleCharInfo
结构的二维数组。然后你可以通过它来获得你需要的角色。
请注意,这不一定会将所有内容输出到控制台。相反,它将获得当前在屏幕缓冲区中的所有内容。如果应用程序写入的内容超出了屏幕缓冲区的范围,则无法获得滚动的信息。