FileSystemWatcher中的Changed事件和Created事件有何区别?

3
我正在使用 FileSystemWatcher 监视某个目录,并且当有人保存对文件的编辑时,我需要触发一个事件,而另一个事件在创建或移动文件时触发。
通过结合 DeletedCreated 事件来监视移动的文件是可行的。当有人保存对文件的编辑时,确实会触发 Changed 事件。然而,当他们移动文件时,Changed 事件也会被触发,这会干扰到我对于 CreatedDeleted 事件的处理。
所以基本上,我希望仅在用户保存对文件的编辑时触发 Changed 事件,而不是当用户移动或创建文件时触发。我尝试使用 ChangeType 属性来检查是否实际上是 Changed 事件还是 Created 事件,但出乎意料的是,即使移动或创建文件,ChangeTypeChanged 也会被触发,而不是 ChangeType 中的 Created 类型(它应该是其中之一)。
所以我不知道如何判断 Change 事件实际上是由文件编辑引起的,而不是由文件创建或移动引起的...
有任何想法吗?
1个回答

5

当您应用NotificationFilter,例如NotifyFilter.AttributesNotifyFilter.LastAccess时,这是正常行为。如果在文件移动“删除-创建-更改-更改”时应用了两个过滤器,则会通知Changed两次,因此:

  • 简单地不要添加不相关的通知过滤器;如果只删除NotifyFilter.AttributesNotifyFilter.LastAccess,则在移动文件时将不会接收到Changed事件,只会收到DeletedCreated
  • 如果您希望坚持使用已经使用的通知过滤器,则有另一个提示可以让您生成一个解决方案,即当文件移动时,通知序列将是DeletedCreated然后Changed,它们始终按此顺序排列..

谢谢,很有见地。仅使用NofityFilter无法解决问题,因为文件夹在文件引发删除和创建事件之前会引发更改事件,但是我成功地使用了你的两个提示和一个计时器来解决它。就像你说的那样,有点麻烦,但是它能用 :-) - Anders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接