整个计算机的文件查看器(可选?)

本文关键字:可选 计算机 文件 | 更新日期: 2023-09-27 18:23:52

我想编写一个应用程序,在整个计算机上每次更改文件时都会获取事件(以便在文件位置/权限和应用程序的数据库之间同步)。

我本来想使用.net filewatcher类,但经过一些测试后,我发现了以下限制:

1) 文件观察程序有一个缓冲区(http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.90).aspx):

如果在短时间内有许多更改,缓冲区可能会溢出。这导致组件丢失对目录中的更改的跟踪,它只会提供一揽子通知。增加的大小具有InternalBufferSize属性的缓冲区是昂贵的,因为它来自无法交换到磁盘的非分页内存,因此保持缓冲区足够小但足够大,不会错过任何文件更改事件。为了避免缓冲区溢出,请使用NotifyFilter和包含Subdirectories属性,以便您可以筛选出不需要的更改通知。

因此,在整个计算机中,我可以获得一些需要处理的大量事件(峰值)。即使在事件处理中,我只是将事件信息添加到队列中,我仍然可能错过事件。

2) Filewatcher存在内存泄漏:http://connect.microsoft.com/VisualStudio/feedback/details/654232/filesystemwatcher-memory-leak我自己检查了一下,这是真的,几天后我的进程内存从20MB增长到250MB

3) 微软说我们应该对特定的文件夹使用filewatcher(我不知道为什么):

使用FileSystemWatcher监视指定目录中的更改。

因此,出于这些原因,我需要一个替代解决方案来创建我的应用程序。我知道我可以写一个驱动程序,但我更喜欢它是一个.net解决方案(当然是基于win32api)。

谢谢你的帮助,Omri

整个计算机的文件查看器(可选?)

进行监控(尤其是同步通知)会降低系统速度。您可能可以使用我们的CallbackFilter产品,该产品提供了一个驱动程序和一个方便的.NET API来跟踪文件更改。CallbackFilter支持更快的异步通知。折扣和免费许可证是可能的。

尝试通过WMI imo执行此操作-以下链接相关:http://www.codeproject.com/Articles/42212/WMI-and-File-System-Monitoring