我正在使用FileSystemWatcher
来读取由另一个应用程序写入的文件的内容。发生的事件如下:
onCreated
事件。onChanged
事件发生,未知次数(有时是2,有时是3,有时是4)。在onChanged
事件的处理程序中,是否有一个技巧要知道这是另一个应用程序最后一次写入此文件?
答案 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:
更改事件触发
启动计时器(这些天使用任务)(通常少量时间〜秒)
如果更改事件再次触发,请重置计时器/任务延迟
执行任务后,这意味着写入已经稳定了至少几秒钟,表明文件访问已完成。
*在某些情况下可能需要调整超时,具体取决于文件大小和访问程序