区分 FileSystemWatcher 中的 Changed 事件和 Created 事件?

And*_*ers 3 .net c# filesystemwatcher c#-4.0

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

使用 和 Created 事件的组合可以很好地监视移动的文件Deleted。当有人将编辑保存到文件时,确实会引发 Changed 事件。但是,当他们移动文件时Changed,事件也会引发,这会干扰我对Created和已删除事件的处理。

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

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

有任何想法吗?

Jal*_*aid 5

当您应用某些过滤器NotificationFilter(例如NotifyFilter. Attributes和 )时NotifyFilter.LastAccess,这是正常行为,如果在文件移动“删除 - 创建 - 更改 - 更改”时应用了两个过滤器,它甚至会通知Changed两次,因此:

  • 不要添加不相关的通知过滤器;如果您只是删除 NotifyFilter. Attributes并且移动文件时NotifyFilter.LastAccess 不会收到事件,则只能。ChangedDeletedCreated
  • 如果您希望坚持使用已经使用的通知过滤器,这里还有其他提示可以让您生成脏解决方案,事实上,当文件移动时,通知的顺序将是Deleted,Created然后Changed,它们将始终按此顺序..