7

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

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

我能想到的唯一另一件事是在执行写入后等待一小段时间,让操作系统在重新启用 FSW 之前完成对目录的修改,但这似乎很不自然,我不喜欢它。


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

4

1 回答 1

6

您无法使用 .NET API 执行此操作。

正如多位用户指出的那样,您最好维护一个您所做的更改列表并将它们从您观察到的更改集中减去。

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

更新:我打电话给我在这个项目上工作的团队中的某个人,他们确认我们只有内核空间中的 PID。

于 2010-05-09T11:13:13.217 回答