FileSystemWatcher 检测连续变化
FileSystemWatcher detects continuous change
我正在使用 FileSystemWatcher 来检测文件中的更改 - 我监视目录,然后查看通过事件参数传入的文件是否与我感兴趣的文件匹配。
我们有一个客户端的情况是不断触发更改的事件,但是当我检查修改日期时没有任何更改。
这给我们带来了各种各样的问题。我可以(而且我正在)在对事件采取行动之前检查最后修改日期是否已更改。
我无法轻松调试它,因为我无法重现它,尽管我可以在客户端机器上放置调试版本 - 虽然有时它会停止发生。
但我想知道这个问题是否有我可以预防的已知原因。
[编辑] 我最初没有添加这个,因为我很确定它不相关,但是以前版本的代码 对有问题的文件,超出了我们在代码中处理的范围。然而,当前版本没有这个问题,机器已经重置,所以我无法想象它会导致当前问题。
可能正在发生其他更改事件,例如文件属性或安全 ACL 修改。看看通知过滤器:
https://msdn.microsoft.com/en-us/library/system.io.notifyfilters(v=vs.110).aspx
您可以将此设置为过滤以仅包含您想要的更改。在这种情况下,听起来您只需要修改写入时间。您可以将其分配给观察者上的 NotifyFilter
属性。
很难说出在您的具体情况下发生了什么,但文件属性可能正在被更改(例如,通过索引器)或某些此类后台进程。这些修改可能不会导致对上次写入时间的更改,但仍可能导致观察程序触发。
我正在使用 FileSystemWatcher 来检测文件中的更改 - 我监视目录,然后查看通过事件参数传入的文件是否与我感兴趣的文件匹配。
我们有一个客户端的情况是不断触发更改的事件,但是当我检查修改日期时没有任何更改。
这给我们带来了各种各样的问题。我可以(而且我正在)在对事件采取行动之前检查最后修改日期是否已更改。
我无法轻松调试它,因为我无法重现它,尽管我可以在客户端机器上放置调试版本 - 虽然有时它会停止发生。
但我想知道这个问题是否有我可以预防的已知原因。
[编辑] 我最初没有添加这个,因为我很确定它不相关,但是以前版本的代码 对有问题的文件,超出了我们在代码中处理的范围。然而,当前版本没有这个问题,机器已经重置,所以我无法想象它会导致当前问题。
可能正在发生其他更改事件,例如文件属性或安全 ACL 修改。看看通知过滤器:
https://msdn.microsoft.com/en-us/library/system.io.notifyfilters(v=vs.110).aspx
您可以将此设置为过滤以仅包含您想要的更改。在这种情况下,听起来您只需要修改写入时间。您可以将其分配给观察者上的 NotifyFilter
属性。
很难说出在您的具体情况下发生了什么,但文件属性可能正在被更改(例如,通过索引器)或某些此类后台进程。这些修改可能不会导致对上次写入时间的更改,但仍可能导致观察程序触发。