0

我在运行控制台应用程序时将统计信息发送到控制台窗口。我想定期将控制台的内容刷新到文本文件,以及程序何时关闭以及是否关闭。我认为 console.out.writeline() 会起作用,但它不会产生价值。我无法跟踪写入控制台窗口的所有内容,因此基本上每 6 小时后,我只想将当时显示的所有内容写入文本文件。只是想知道这是否可能。提前致谢。

4

1 回答 1

2

考虑到所有因素,您最好使用将记录到控制台和文件的东西。因此Console.WriteLine,您无需调用 ,而是调用Logger.WriteLine,它会同时写入两者。

可以从控制台读取并写入文件,但这有点困难并且并不完美。控制台屏幕缓冲区只能容纳这么多。如果您要输出大量数据,其中一些数据将被推出缓冲区。

您可以通过更改控制台窗口的属性来设置屏幕缓冲区的大小。

如果要从控制台读取数据,则必须读取控制台屏幕缓冲区。.NETConsole类不提供对它的访问。您最终不得不调用 Windows API 函数来执行此操作。

几年前,我为一系列关于使用.NET控制台 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结构数组。然后,您可以通过它并获得所需的字符。

请注意,这不一定会得到输出到控制台的所有内容。相反,它将获取当前在屏幕缓冲区中的所有内容。如果应用程序写入的内容超出屏幕缓冲区的容量,您将无法获得滚动显示的信息。

于 2013-09-16T13:27:52.573 回答