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

时间:2015-02-25 13:39:12

标签: .net vb.net filesystemwatcher

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

  1. 首先,发生onCreated事件。
  2. 然后,onChanged事件发生,未知次数(有时是2,有时是3,有时是4)。
  3. onChanged事件的处理程序中,是否有一个技巧要知道这是另一个应用程序最后一次写入此文件?

2 个答案:

答案 0 :(得分:1)

通过检查相关文件的OnChanged时间戳,可以检测并丢弃FileSystemWatcher中的任何重复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

答案 1 :(得分:0)

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

IE:

更改事件触发

启动计时器(这些天使用任务)(通常少量时间〜秒)

如果更改事件再次触发,请重置计时器/任务延迟

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

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