如何在没有持续扫描的情况下检测目录或文件的更改时间

jjx*_*tra 18 c# windows filesystems directory file

除了读取所有文件并将它们与之前的快照进行比较之外,有没有办法检测C#中的目录何时发生变化?我不介意PInvoke,如果这是它需要的.

LBu*_*kin 31

使用FileSystemWatcher类 - 它可以执行您想要的操作.它不会告诉您文件中的哪些字节发生了变化,但它会告诉您哪些文件有变化.

来自doc:

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

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

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

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

  • 它通常会告诉你哪些文件有变化.我测试了这个东西.在重负荷下它不是100%. (6认同)
  • 在实施过程中还需要注意很多"问题".确保您彻底阅读了所有文档.您可能不得不在发生错误时不时重新初始化观察者. (2认同)

Mak*_*san 5

我必须为一个程序执行此操作,该程序将查看目录并查看是否添加了任何新图像文件,然后它将自动调整它们的大小.当有人一次添加多个文件时,观察者将无法捕获所有文件,因为它是单线程的,并且正在忙于调整一个图像的大小而另一个图像被丢弃.

我不得不把它变成一个多线程的应用程序,主线程只是看了目录并将文件添加到队列中,另一个线程将从队列中读取并调整这些图像的大小.

如果您要对文件做任何事情,那么您可能需要小心.