如何在不经常扫描的情况下检测目录或文件何时更改?

除了读取所有文件并将它们与以前的快照进行比较之外,是否有一种方法可以检测C#中的目录Windows中何时更改? 我不介意PInvoke,如果这是需要的。

Solutions Collecting From Web of "如何在不经常扫描的情况下检测目录或文件何时更改?"

使用FileSystemWatcher类 – 它做你想做的。 它不会告诉你文件中的哪些字节发生了变化, 但会告诉你哪些文件有变化。

从文档:

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

要监视所有文件中的更改,请将Filter属性设置为空字符串(“”)或使用通配符(“ ”)。 要查看特定的文件,请将Filter属性设置为文件名。 例如,要监视文件MyDoc.txt中的更改,请将Filter属性设置为“MyDoc.txt”。 您还可以观察特定类型文件中的更改。 例如,要监视文本文件中的更改,请将Filter属性设置为“* .txt”。

在目录或文件中可以看到几种类型的更改。 例如,您可以观察属性,LastWrite日期和时间或文件或目录的大小中的更改。 这是通过将NotifyFilter属性设置为其中一个NotifyFilters值来完成的。 有关可以观看的更改类型的更多信息,请参阅NotifyFilters。

您可以观察重命名,删除或创建文件或目录。 例如,要监视文本文件的重命名,请将Filter属性设置为“* .txt”,并使用为其参数指定的Renamed调用WaitForChanged方法。

我不得不这样做一个程序,会看一个目录,看看是否有新的图像文件被添加,然后它会自动调整它们的大小。 当有人一次添加多个文件时,观察者将无法捕捉到所有文件,因为它是单线程的,并且忙于调整一个图像而另一个被丢弃。

我不得不使这个多线程的应用程序,其中主线程刚刚观看目录,并将文件添加到队列中,另一个线程将从队列中读取和调整这些图像。

如果你要对文件做任何事情,那么你可能要小心一点。