快速解释。 我有一个游戏服务器在运行时编写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));
}
答案 0 :(得分:0)
一些事情。 1.可以关闭NTFS文件系统上的上次访问时间更新。许多服务器执行此操作以减少文件系统活动。 Windows也可能延迟最多1小时写入上次访问时间。因此,基于上次访问获得实时更新通常是不可靠的。但是,您正在查看其他属性,因此这可能不是问题,但如果这是您要过滤的唯一属性。
另请注意,上次修改时间未更新UNTIL文件系统句柄已关闭。如果您的服务器代码保持句柄打开并且只附加到文件,那么这可能是一个问题。如果您控制服务器端代码,请检查以确保在每次写入后关闭文件句柄。这是一篇包含一些有用信息的文章:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(v=vs.85).aspx