区分FileSystemWatcher中的Changed和Created事件?

时间:2011-08-09 20:45:11

标签: c# .net c#-4.0 filesystemwatcher

我正在使用FileSystemWatcher来监控某个目录,当有人将编辑内容保存到文件时,我需要引发一个事件,而当他们创建或移动文件时,我需要引发另一个事件。

使用Deleted和Created事件的组合监控移动的文件可以正常工作。当有人将编辑保存到文件时,Changed事件确实会被提升。但是,当他们移动文件时,Changed事件也会被提升,这会干扰我对Created和已删除事件的处理。

所以基本上,我只想在用户将编辑保存到文件时提升Changed事件,而不是在用户移动或创建文件时。我尝试使用ChangeType属性来检查它是否实际上是Changed事件或Created事件,但令我惊讶的是,ChangeType Changed是即使在移动或创建文件时也为Change事件引发,而不是ChangeType Created(应该是其中一种类型)。

所以我不知道如何检查Change事件是否实际上是由文件编辑触发的,而不是文件创建或移动......

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

当您应用NotificationFilterNotifyFilter. Attributes之类的NotifyFilter.LastAccess时,这是正常行为,如果在文件移动时应用了两个过滤器,它甚至会通知Changed两次已删除 - 已创建 - 已更改 - 已更改“,因此:

  • 只是不添加不相关的通知过滤器;如果你只是删除 NotifyFilter. AttributesNotifyFilter.LastAccess 移动文件时,您不会收到Changed事件,仅Deleted然后Created
  • 如果您希望坚持使用已经使用的通知过滤器,那么此处还有其他提示允许您生成解决方案,它是事实上,当文件移动时,通知顺序为DeletedCreated然后Changed,它们将始终按此顺序显示..