【发布时间】:2015-02-25 13:39:12
【问题描述】:
我正在使用FileSystemWatcher 读取由另一个应用程序写入的文件的内容。发生的事件如下:
- 首先,
onCreated事件发生。 - 然后,
onChanged事件发生,次数未知(有时是 2 次,有时是 3 次,有时是 4 次)。
在onChanged 事件的处理程序中,是否有技巧知道这是该文件最后一次被其他应用程序写入?
【问题讨论】:
-
理论上,显然没有。除非您对其他应用程序有专门的了解,否则您如何知道它正在做什么以及将要做什么?
-
你可以启动一个BGW或线程来“监视”新文件;尝试以独占方式打开它,当您不再收到 IO 异常时,它是完整的或至少可以安全使用/复制/移动/打开。如果它在第一次尝试前等待 1-2 秒,您可能会在第一次尝试时成功,如果在重试之前没有提供超时。在出现问题且仍处于锁定状态的情况下,最大尝试救助可能是合适的。
-
同意 Pluto - 唯一可以确定的方法是锁定文件。这可能会导致其他应用程序出现异常。
-
请参阅weblogs.asp.net/ashben/31773 显然引发的多个事件是一个已知问题
-
就像 PMF 所说,除非您了解其他应用程序,否则无法知道。如果您知道应用程序需要 10 秒进行修改,您可以等待 15 秒再访问文件。
标签: .net vb.net filesystemwatcher