c# - 区分 FileSystemWatcher 中的 Changed 和 Created 事件?

标签 c# .net c#-4.0 filesystemwatcher

我正在使用 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
  • 如果您希望坚持使用您已经在使用的通知过滤器,这里还有其他提示允许您生成解决方案,它是事实上,当文件移动时,通知的顺序将是 DeletedCreated 然后是 Changed,它们将始终按此顺序..

关于c# - 区分 FileSystemWatcher 中的 Changed 和 Created 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7002750/

相关文章:

c# - 具有复制/粘贴功能的只读 DataGridView?

wcf - 在序列化时忽略 DataMember

c# - 如何使用 CodeDOM 创建显式接口(interface)声明索引属性

c# - 单元测试未涵盖 LINQ `Any`

.net - IsNull(Max(id)) 的最佳 Linq2Sql 等效项

c# - 你什么时候以及为什么要向上转换一个对象?

c# - 为什么 Console.Readline 没有按预期执行

c# - 如何更改查询字符串参数的值?

mongodb - 获取 listOfStrings 中 subDocument.value 所在的所有项目

c# - 在另一个范围内赋予不同的含义