我如何确定这是 FileSystemWatcher onChanged 事件中的最后一次更改?

How can I make sure this is the last change in FileSystemWatcher onChanged event?

我正在使用 FileSystemWatcher 读取由另一个应用程序写入的文件的内容。发生的事件如下:

  1. 首先,onCreated 事件发生。
  2. 然后,onChanged 事件发生,次数未知(有时是 2 次,有时是 3 次,有时是 4 次)。

onChanged 事件的处理程序中,是否有技巧可以知道这是该文件最后一次被其他应用程序写入?

任何来自 FileSystemWatcher 的重复 OnChanged 事件都可以通过检查相关文件的 File.GetLastWriteTime 时间戳来检测和丢弃。像这样:

Private lastRead As DateTime = DateTime.MinValue

Private Sub OnChanged(source As Object, a As FileSystemEventArgs)
    Dim lastWriteTime As DateTime = File.GetLastWriteTime(uri)
    If lastWriteTime <> lastRead Then
        doStuff()
        lastRead = lastWriteTime
    End If
    ' else discard the (duplicated) OnChanged event
End Sub

讨论了另一种方法here

我通常通过等待预定义的时间超时并验证文件自上次检查以来没有更改来处理这些问题。

IE:

更改事件触发

启动计时器(最近使用任务)(通常为少量时间~秒)

如果更改事件再次触发,重置 timer/task 延迟

任务执行后,表示写入至少稳定了几秒钟,表明文件访问已完成。

*在某些情况下可能需要调整超时,具体取决于文件大小和访问程序