在change事件上阅读console.log

时间:2014-02-21 20:38:22

标签: c# events event-handling onchange filesystemwatcher

快速解释。 我有一个游戏服务器在运行时编写console.log文件。我正在尝试创建一个在进行新更改时读取文件的事件。

如果我从文本编辑器中保存文档,我的changeevent运行正常。但不是在服务器写入它时。

当我在运行时打开日志文件时,我可以看到文档中的所有行都被写得很好。

为什么我没有调用该事件?

代码:

class Collect
{
    public FileSystemWatcher watcher = new FileSystemWatcher("C:\\.q2online\\action\\logs\\");

    public Collect()
    {
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        watcher.Changed += new FileSystemEventHandler(OnChanged);

        watcher.Filter = "console.log"; 
        watcher.EnableRaisingEvents = true;
    }

    private static void OnChanged(object scource, FileSystemEventArgs e)
    {
        Debug.WriteLine(ReadLastLineFromFile(DataContainer.path.Default.logFilePath));
    }

1 个答案:

答案 0 :(得分:0)

一些事情。 1.可以关闭NTFS文件系统上的上次访问时间更新。许多服务器执行此操作以减少文件系统活动。 Windows也可能延迟最多1小时写入上次访问时间。因此,基于上次访问获得实时更新通常是不可靠的。但是,您正在查看其他属性,因此这可能不是问题,但如果这是您要过滤的唯一属性。

另请注意,上次修改时间未更新UNTIL文件系统句柄已关闭。如果您的服务器代码保持句柄打开并且只附加到文件,那么这可能是一个问题。如果您控制服务器端代码,请检查以确保在每次写入后关闭文件句柄。这是一篇包含一些有用信息的文章:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(v=vs.85).aspx