C#实时读取文本文件

时间:2017-02-17 21:13:07

标签: c#

我一直在尝试实时阅读文本文件并在控制台中显示其最后一行。问题是当大小增加300kb +我的代码无法处理它或只是事件没有触发。 我确实阅读了谷歌上的所有帖子,但无法真正想到如何正确实现这一点。请记住,我是编程的新手。

如果您能分享有关如何实现这一目标的任何想法,我将不胜感激。 这是我的示例代码:

var wh = new AutoResetEvent(false);
        var fsw = new FileSystemWatcher(".");
        fsw.Filter = pathToFile;
        fsw.EnableRaisingEvents = true;
        fsw.Changed += (s, e) => wh.Set();

        var fs = new FileStream("c:/test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
        using (var sr = new StreamReader(fs))
        {
            var s = "";
            while (true)
            {
                s = sr.ReadLine();
                if (s != null && s.Contains("CActor::ClKill"))
                {
                    await b.Channel.SendMessage(s);
                    Console.WriteLine("Transmitting: " + s);
                }
                else
                {
                    Console.WriteLine("Sleeping...");
                    wh.WaitOne(1000);
                }
            }
        }

        wh.Close();

2 个答案:

答案 0 :(得分:0)

我确实找到了解决问题的方法。

wh.WaitOne(1000);显然太长了,在较大的文件上可以说300多行,每行必须等待一秒,所以花了很多时间来执行。

答案 1 :(得分:-2)

如果您只想显示文件的最后一行,则可以执行以下操作:

var lastLine = File.ReadLines("c:/test.txt").Last();

正如MSDN所说:

  

使用ReadLines时,可以开始枚举集合   返回整个集合之前的字符串;当你使用   ReadAllLines,您必须等待返回整个字符串数组   在您可以访问阵列之前。因此,当你在工作   非常大的文件,ReadLines可以更高效