c# - 为特定更新禁用 FileSystemWatcher?

标签 c# .net filesystemwatcher

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

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

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

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

最佳答案

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

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

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

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

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

相关文章:

c# - 如何在 C# 中使用 AT 命令

c# - 如何将 COM 对象包装在 native .NET 类中?

C# 文件/文件夹监视器

c# - 如何使用 filesystemwatcher 在 c# 中监视 windows 系统中文件的更改

c# - 如何将结构编码为指向结构的指针?

c# - 如何重定向到另一个页面并在该页面上触发事件?

c# - 分层架构中的 Entity Framework

java - C# 和 Java 中的 StringBuilder 相等

c# - SqlException 事务在通信缓冲区资源上被死锁

java.nio.file.WatchEvent 只给我相对路径。如何获取修改后文件的绝对路径?