C# 如何在不进行持续扫描的情况下检测目录或文件的更改

C# 如何在不进行持续扫描的情况下检测目录或文件的更改,c#,windows,file,filesystems,directory,C#,Windows,File,Filesystems,Directory,除了读取所有文件并将其与以前的快照进行比较外,还有什么方法可以检测C#with Windows中的目录何时更改?如果需要的话,我不介意品沃克 编辑FileSystemWatcher类很好,但有一个问题是,您必须启动对后台任务/线程的回调通知中的任何工作,以避免阻塞,这将导致丢弃的事件。使用该类-它做您想要做的事情。它不会告诉您文件中哪些字节已更改,但会告诉您哪些文件已更改 从文档: 使用FileSystemWatcher监视 指定目录中的更改。你 可以监视文件和中的更改 指定目录的子目录 目录您

除了读取所有文件并将其与以前的快照进行比较外,还有什么方法可以检测C#with Windows中的目录何时更改?如果需要的话,我不介意品沃克

编辑FileSystemWatcher类很好,但有一个问题是,您必须启动对后台任务/线程的回调通知中的任何工作,以避免阻塞,这将导致丢弃的事件。

使用该类-它做您想要做的事情。它不会告诉您文件中哪些字节已更改,但会告诉您哪些文件已更改

从文档:

使用FileSystemWatcher监视 指定目录中的更改。你 可以监视文件和中的更改 指定目录的子目录 目录您可以创建一个组件 要在本地计算机上查看文件,请使用 网络驱动器或远程计算机

要监视所有文件中的更改,请设置 将筛选器属性设置为空字符串 (“”)或使用通配符(“”)。到 查看特定文件,设置过滤器 属性设置为文件名。对于 例如,观察 文件MyDoc.txt,设置过滤器 属性设置为“MyDoc.txt”。你也可以 注意某种类型的变化 文件例如,观察 如果要更改文本文件,请设置过滤器 属性设置为“*.txt”

您可以选择几种类型的更改 可以在目录或文件中监视。 例如,您可以监视更改 在属性中,最后写入日期和 时间、文件大小或 目录。这是通过设置 将NotifyFilter属性设置为以下内容之一: NotifyFilters值。更多 有关所做更改类型的信息 可以看,可以看

您可以监视重命名、删除、, 或创建文件或目录。 例如,监视的重命名 文本文件,将过滤器属性设置为 “*.txt”并调用WaitForChanged 方法,并为其指定了重命名的 它的参数


我曾经为一个程序做过这样的操作,它会监视一个目录,看看是否添加了任何新的图像文件,然后它会自动调整它们的大小。当有人一次添加多个文件时,观察者不会捕获所有文件,因为它是单线程的,并且在删除另一个图像时忙于调整一个图像的大小

我必须让它成为一个多线程的应用程序,其中主线程只是监视目录并将文件添加到队列中,另一个线程将从队列中读取并调整这些图像的大小


如果要对文件进行任何操作,您可能需要注意这一点。

它通常会告诉您哪些文件发生了更改。我已经测试过了。在重载情况下,它不是100%。在实现过程中还需要注意很多“陷阱”。确保您彻底阅读了所有文档。当出现错误时,您可能需要不时地重新初始化观察程序。FileSystemWatcher是否会显示哪些文件被哪个程序更改(即,检测何时使用记事本编辑
example.txt
)?是的,我肯定会为我将要执行的每个文件操作生成一个线程池线程,谢谢提示!