我已经使用了fs watcher时间,FSwatcher创建事件触发器时创建的最大挑战(没有实际的最终大小),这意味着如果有人插入在文件共享中创建了一个巨大的文件“gigs”,它将被锁定,直到创建者应用程序发布的文件,这样我才能在测试环境中看到完美的效果,在这种环境中可以显示有限的文件和数据。对于生产fswatcher结合后台工作人员和定时器可以成为解决方案,例如FSwatcher创建的甚至应该将任务交给后台工作人员。尽管如此,我还是看到了一些我需要每小时计时器来移动剩余文件的情况,当用户在几个小时内仍在使用这些文件时,出现了一些奇怪的情况。我发现完美的解决方案使用FSwatcher以及多线程和定时器。我假设你想要一个Windows服务,而不是基于表单或基于Web的应用程序。对于文件更改的事件,我不会使用这个,如果任何应用程序在文件流中打开文件,它将执行几个更改,但仍然锁定文件,所以你可以不做任何事情,也许你可以添加到列表,以便能够稍后处理它,但据我所知,在这种情况下,如果文件在流中被编辑,它将继续激发你的事件。所以我的建议使用创建的事件在事件中设置了一些超时来检查真正的快速读取可用性,如5秒,如果这没有发生后台线程,甚至bg踩仍然不能处理该文件,有一个计时器保持重试在所有文件中,这两种情况下都没有处理(像大文件和服务终止,然后处理后台线程)。
概要FSwatcher引发事件,但并不意味着文件可以被访问和准备处理,它只是监视文件系统并激发你订阅的事件。事件触发,但如果你没有足够快地处理它,你可能会错过下一个事件,所以使用事件进行非常快速的动作,如果你创建了很多文件,比如将它们添加到列表中,任务!如果你在一个事件中花费太多时间,你可能会错过一些,所以赶上事件,立即交接任务,并等待下一个:)
这个以前的问题/答案应该给你一个好的开始:http:/ /stackoverflow.com/questions/239988/filesystemwatcher-vs-polling-to-watch-for-file-changes。简而言之,FileSystemWatcher底层的Win32缓冲区可能会溢出 – Kevin
[.NETFramwork 4中的FileSystemWatcher的可靠程度如何?](http://stackoverflow.com/questions/7191380/how-reliable-is-the-filesystemwatcher-in -netframwork-4) – Yuck