2011-08-09 28 views
2

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

使用Deleted和Created事件的组合,监视移动的文件可以正常工作。当某人将编辑保存到文件中时,确实会引发Changed事件。但是,当他们移动一个文件时,Changed事件也会升高,并且会干扰我为Created和已删除事件所进行的处理。

所以基本上,我只想在用户保存对文件的编辑时才提高Changed事件,而不是在用户移动或创建文件时。我尝试使用ChangeType属性来检查事件是否实际上是Changed事件或Created事件,但令我惊讶的是,即使在移动或创建文件时也为Change事件产生了ChangeTypeChanged,而不是ChangeTypeCreated(据推测应该是其中的一种)。

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

任何想法?

回答

3

这是正常的行为,当你应用一些诸如NotifyFilter. AttributesNotifyFilter.LastAccessNotificationFilter,如果在文件移动应用两个滤波器它甚至会通知Changed两次“删除 - 创建 - 改变 - 改变”,所以:

  • 只需添加不相关的通知过滤器;如果您刚删除 NotifyFilter. AttributesNotifyFilter.LastAccess 移动文件时您将不会收到Changed事件,只有Deleted然后Created
  • 如果你希望坚持使用通知你已经在使用的过滤器,还有其他提示在这里,让你产生的解决方案,那就是当文件移动,序列的事实通知将是Deleted,Created然后Changed,他们将总是在这个顺序..
+0

谢谢,很好的见解。只是使用NofityFilter不起作用,因为该文件夹在文件引发已删除和创建的事件之前引发了更改的事件,但我设法使用两个提示和计时器的组合来修复它。就像你说的,肮脏,但它的工作原理:-) – Anders

+0

很高兴为你工作 –

相关问题