【问题标题】:Reading from a text file and updating从文本文件中读取并更新
【发布时间】:2013-04-05 18:38:17
【问题描述】:

我是编程新手,遇到了一个问题,不知道如何处理。

我用线

    textBox2.Text = System.IO.File.ReadAllText(path);

从文本文件中读取并将内容粘贴到 textBox2 中。

现在的问题是我尝试读取的文本文件是一个大(几兆字节)文本文件。此文本文件包含来自程序的日志,新日志始终添加在文件底部。
现在,如果更新了文本文件,我想更新 textBox2。但是我不确定如何以有效的方式做到这一点。一种方法是再次读取整个文本文件,但由于文本文件很大,这是一个非常缓慢的过程。

我有兴趣找到一种不同的、更快的方法来处理这个问题。我对确切的代码并不是很感兴趣,我只是希望找出我应该看什么方向以及我可以考虑哪些选项。

【问题讨论】:

  • 您不想将内容读入 TextFile,您应该将内容读入 List 或者如果需要读入 RitchText 字段,还要说明分隔符是什么

标签: c# io


【解决方案1】:

嗯,你可以检查两件事:

如果您跟踪这些,您应该能够检测到文件何时发生更改 - 至少具有合理的置信度。

此外,您可以使用FileSystemWatcher 来观察变化。

此外,您可能需要考虑跟踪您已阅读到的位置 - 这样您就可以通过查找文件中的正确位置来读取新数据。

最后,TextBox 可能并不是大型日志文件的最佳用户界面。如果这是一个结构化日志文件,最好在 UI 中显示该结构 - 例如,每个日志条目在表中一行,可能带有过滤选项等。

【讨论】:

  • 想:如果每次文件更改时我都会收到通知,如果它是一个日志文件并且每个日志行都刷新到磁盘,我可能会收到很多通知..对吗?所以,他还是应该每隔 X 秒检查一次,对吧?
  • 感谢您的回复。你说:“另外,你可能要考虑跟踪你读到的地方——这样你就可以通过寻找文件中的正确位置来读取新数据。”你有什么建议吗?
  • @Brick:如果你知道上次读取时文件的长度,你可以打开一个FileStream进行读取,设置Position属性,然后创建一个@987654330 @ 读取其余数据。请注意,您需要非常小心数据竞争,因为文件大小在您读取大小和读取数据之间发生变化。
  • @Brick:当然,前提是你可以确定你已经阅读的文本不会改变。也就是说,您只会将文本附加到文件中。
【解决方案2】:

您可以每隔 X 秒检查一次。如果文件更改了,则更新,如果没有,则不执行任何操作。您可以保留文件的修改时间以了解它是否更改。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多