我正在使用 FileSystemWatcher
来监视某个目录,我需要在有人将编辑保存到文件时引发一个事件,在他们创建或移动文件时引发另一个事件。
使用 Deleted
和 Created 事件的组合可以很好地监视移动的文件。当有人将编辑保存到文件时,确实会引发 Changed 事件。但是,当他们移动文件时,也会引发 Changed
事件,这会干扰我对 Created
和 Deleted 事件的处理。
基本上,我只想在用户将编辑保存到文件时引发 Changed
事件,而不是在用户移动或创建文件时引发。我尝试使用 ChangeType
属性来检查它实际上是 Changed
事件还是 Created
事件,但令我惊讶的是,ChangeType
Changed
即使在移动或创建文件时也会为 Change 事件引发,而不是 ChangeType
Created
(应该是其中一种类型)。
所以我不知道如何检查 Change 事件实际上是由文件编辑触发的,而不是文件创建或移动...
有什么想法吗?
最佳答案
当您应用某些 NotificationFilter
(例如 NotifyFilter)时,这是正常行为。属性
和NotifyFilter.LastAccess
,如果在文件移动“删除-创建-更改-更改”时应用了两个过滤器,它甚至会通知更改
两次,所以:
- 只是不要添加不相关的通知过滤器;如果你只是删除
通知过滤器。属性
和NotifyFilter.LastAccess
移动文件时,您不会收到Changed
事件,只有Deleted
然后是Created
。 - 如果您希望坚持使用您已经在使用的通知过滤器,这里还有其他提示允许您生成脏解决方案,它是事实上,当文件移动时,通知的顺序将是
Deleted
、Created
然后是Changed
,它们将始终按此顺序..
关于c# - 区分 FileSystemWatcher 中的 Changed 和 Created 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7002750/