有谁知道我的应用程序对目录中的文件进行更改时如何可靠地禁用FileSystemWatcher对象,以便仅监视目录的外部更改?

我尝试在执行写操作之前立即将EnableRaisingEvents设置为false,然后在执行此操作后立即将其设置为true,但是这种方法似乎不可靠,偶尔我仍然会触发事件。

我唯一想到的另一件事是在执行写操作之后等待一小段时间,以便让操作系统在重新启用FSW之前完成目录的修改,但这似乎有点骇人听闻,我不喜欢它。

更麻烦的是,该目录可能包含许多文件,这些文件的身份超出了我的了解和控制范围,因此,我不能只等待事件触发特定文件然后忽略它。一次修改后,可能会触发任意数量的FSW事件(因为可能会更新许多文件)。

最佳答案

您不能使用.NET API来执行此操作。

正如多个用户指出的那样,最好保留一份所做的更改列表,然后从观察到的更改集中减去这些更改。

您还可以使用Win32级别的API,如果我没有记错的话,它会为您提供进行更改的过程的PID(不确定这一点,我已经编写了一个驱动程序,然后在内核空间内进行了此操作(以及更多)) )。

更新:我给与该项目一起工作的团队中的某个人打过电话,他们确认我们仅在内核空间中拥有PID。

关于c# - 禁用FileSystemWatcher的特定更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2796432/

10-11 06:32