C# 区分FileSystemWatcher中已更改和已创建的事件?

C# 区分FileSystemWatcher中已更改和已创建的事件?,c#,.net,c#-4.0,filesystemwatcher,C#,.net,C# 4.0,Filesystemwatcher,我正在使用FileSystemWatcher监视某个目录,当有人保存对文件的编辑时,我需要引发一个事件,当他们创建或移动文件时,我需要引发另一个事件 使用已删除和已创建事件的组合,可以很好地监控移动的文件。当有人保存对文件的编辑时,确实会引发更改事件。但是,当他们移动文件时,Changed事件也会引发,这会干扰我对创建的和删除的事件的处理 因此,基本上,我只想在用户保存对文件的编辑时引发Changed事件,而不是在用户移动或创建文件时。我尝试使用ChangeType属性检查它实际上是Change

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

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

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

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


有什么想法吗?

当您应用一些
NotificationFilter
时,这是正常的行为,例如
NotifyFilter.Attributes
NotifyFilter.LastAccess
,如果在文件移动“Deleted-Created-Changed-Changed”时应用了两个过滤器,它甚至会通知
Changed
,因此:

  • 只要不添加不相关的通知过滤器;如果您只是删除
    NotifyFilter.Attributes
    NotifyFilter.LastAccess
    移动文件时,您不会收到
    Changed
    事件,只有
    Deleted
    然后
    Created
  • 如果您希望继续使用您已经使用的notify筛选器,这里还有其他提示,允许您生成脏的解决方案,事实上,当文件移动时,通知的顺序将被
    删除
    创建
    ,然后
    更改
    ,它们将始终按此顺序

谢谢,很好的见解。仅使用NofityFilter不起作用,因为文件夹在文件引发删除和创建的事件之前引发了一个已更改的事件,但我成功地利用您的两个提示和计时器组合修复了它。正如您所说,脏,但它起作用:-)