我一直在尝试实时阅读文本文件并在控制台中显示其最后一行。问题是当大小增加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();
答案 0 :(得分:0)
我确实找到了解决问题的方法。
wh.WaitOne(1000);显然太长了,在较大的文件上可以说300多行,每行必须等待一秒,所以花了很多时间来执行。
答案 1 :(得分:-2)
如果您只想显示文件的最后一行,则可以执行以下操作:
var lastLine = File.ReadLines("c:/test.txt").Last();
正如MSDN所说:
使用ReadLines时,可以开始枚举集合 返回整个集合之前的字符串;当你使用 ReadAllLines,您必须等待返回整个字符串数组 在您可以访问阵列之前。因此,当你在工作 非常大的文件,ReadLines可以更高效