使用.NET框架监视目录中文件更改的可靠方法

我正在寻找一种可靠的方法来查找目录中的更改。

我尝试过使用FileSystemWatcher,但是当创建,更改或删除许多小文件时,这是相当不准确的。 它错过了我测试中大约1%或2%的文件。 当您快速添加或更改数千个文件时,这是非常多的。

我已尝试以500毫秒,2000毫秒等不同间隔进行轮询更改。在这种情况下,我得到了太多的点击。 这可能与FileInfo对象上的时间戳分辨率有关。

所以我的问题是; 是否有可能使用.NET Framework可靠地获取对目录的更改?

– 基督徒

您是否尝试过增加InternalBufferSize ? 你有多大的尺寸?

来自MSDN :


请注意,当超过缓冲区大小时,FileSystemWatcher可能会错过事件。 要避免丢失事件,请遵循以下准则:通过设置InternalBufferSize属性来增加缓冲区大小。 避免观看具有长文件名的文件,因为长文件名有助于填充缓冲区。 考虑使用较短的名称重命名这些文件。


保持事件处理代码尽可能短。

是的,使用文件系统filter驱动程序执行适当的监视。 这些驱动程序在发送文件系统时(在它们到达文件系统之前或之后)拦截所有发送到文件系统的请求。 通过这种方式,您可以及时(甚至在事件发生之前)获得所有通知,并且您可以控制传递的请求以及请求传递的信息。

您可以自己编写这样的filter驱动程序(大约6到9个月的工作时间来实现它,然后有大量的时间进行测试),或者您可以使用我们的CallbackFilter产品并避免内核模式开发。 CallbackFilter为.NET,VCL和本机C ++提供了预构建的驱动程序和API。