将文本文件流式传输到文本框c#

时间:2011-06-28 08:23:27

标签: c# textbox

假设我有一个连续用文本更新的文本文件,我如何以Windows格式(实时)显示文本框中的内容?

例如,

。这是log.txt的内容:

connected, bla bla bla
disconnected, bla bla bla

PS:我希望它显示在Form1的textBox中(实时也是如此),因此每次文本文件都有新文本时,文本框会显示它。任何想法,请帮助。谢谢。您也可以提供样本工作代码。感谢

4 个答案:

答案 0 :(得分:1)

使用FileSystemWatcher

使用MSDN上的示例(请参阅上面的链接),您可以向Changed事件添加事件处理程序 并从那里更新您的文本框。

答案 1 :(得分:0)

更新文字后,只需致电Application.DoEvents();即可。但请注意,更新太频繁可能会导致闪烁,也会降低整体处理速度。另请注意,如果任何绘图/更新代码再次导致更新/绘制(无限递归),则这很容易出错。

编辑:阅读问题的一半...... 添加FileSystemWatcher以监视日志文件的更改。但是,这是一种非常低效的方法,根据用于编写日志文件的设置,您可能缺少访问权限和/或文件可能仅在应用程序关闭时更新。如果两个进程都是您自己的代码并且您可以修改它们,那么您应该考虑其他可能性(例如,您可以使用某个telnet(或自定义)客户端连接到的简单“服务器”)。

答案 2 :(得分:0)

插入RichTextBox和FilesystemWatcher,以及文本框或其他内容来存储要显示的文本文件的路径和文件名。现在,转到FilesystemWatcher_Changed(或其所谓的)事件。在那里放置一个if来检查更改的文件是否是您想要显示的文件,然后RichTextBox.LoadFile(file)。 这要做的是监视fileystsem(硬盘或你指定的任何文件夹),每次文件被删除时,它都会检查它是否是我们正在查看的文件。如果是,它会将文件重新加载到RichTextBox中。 不要忘记设置FilesystemWatcher的RaiseEvent和Path属性。

示例:

string blaFile = "C:\TextFile.txt"; // The text file that we want to read.

private void FilesystemWatcher_Changed(....).... // The FilesystemWatcher_Changed event notifies us when a file on the monitored path (FilesystemWatcher.Path) has changed. When a file has changed the code within this event gets executed.
{
    if (e.File == blaFile) // We check if the file that has chenged, is the one we want.
    {
        RichTextBox.LoadFile(blaFile); // It is! We load it into the RichtextBox again so that it's "up-to-date"!
    }
}

我不完全确定e.File因为我现在还没有使用过C#,但它就是这样的。

答案 3 :(得分:-1)

不建议使用文本文件,因为有两个进程来访问该文件,您需要实时更新。

尝试使用NamePipeServerStream和NamePipeClientStream进行两个进程内存共享。