阅读控制台.log更改事件



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

如果我从文本编辑器保存文档,我的更改事件运行良好。但不是当服务器写入它时。

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

为什么不调用事件?

法典:

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. 可以关闭 NTFS 文件系统上的上次访问时间更新。 许多服务器这样做是为了减少文件系统活动。 Windows 还可能延迟长达 1 小时的写入上次访问时间。 因此,根据上次访问获取实时更新通常不可靠。 但是,您正在查看其他属性,因此这可能不是问题,但如果这是您过滤的唯一属性,则会成为问题。

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

相关内容

  • 没有找到相关文章

最新更新