我使用.Net FileSystemWatcher编写了一个小测试应用程序,以便密切关注目录.当我将一个大型(几个Mb)文件复制到该目录中时,我会列出以下事件(请参阅屏幕截图 - 并忽略开始时的删除事件).
替代文字http://robinwilson.homelinux.com/FSW.png
我得到了一个创建的事件(如预期的那样),但随后发生了两个更改的事件(相隔大约0.7秒).为什么是这样?这会导致我计划开发的应用程序出现重大问题 - 因为我会尝试用文件做两次事情(大概是在它写完之前一次!).有什么办法可以阻止这种情况发生吗?从我在StackOverflow和其他地方读到的内容来看,一旦文件被更改然后关闭,您应该只获得一个更改的事件.我为什么要两个?
根据文档(参见事件和缓冲区大小下的第一个项目符号点):
常见的文件系统操作可能会引发多个事件.例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged和一些OnCreated和OnDeleted事件.移动文件是一项复杂的操作,由多个简单操作组成,因此会引发多个事件.同样,某些应用程序(例如,防病毒软件)可能会导致FileSystemWatcher检测到其他文件系统事件.