除了读取所有文件并将它们与之前的快照进行比较之外,有没有办法检测C#目录在Windows中的变化?我不介意PInvoke,如果这就是它。
编辑 FileSystemWatcher类非常棒,但有一个问题是你必须将回调通知中的任何工作都放到后台任务/线程中,以避免阻塞导致丢弃的事件。
答案 0 :(得分:30)
使用FileSystemWatcher类 - 它可以满足您的需求。它不会告诉你文件中的哪些字节发生了变化,但它会告诉你哪些文件有变化。
来自doc:
使用FileSystemWatcher进行监听 指定目录中的更改。您 可以监视文件和文件的变化 指定的子目录 目录。您可以创建一个组件 在本地计算机上观看文件, 网络驱动器或远程计算机。
要查看所有文件中的更改,请进行设置 Filter属性为空字符串 (“”)或使用通配符(“。”)。至 观看特定文件,设置过滤器 属性到文件名。对于 例如,要注意变化 文件MyDoc.txt,设置过滤器 属性为“MyDoc.txt”。你也可以 注意某种类型的变化 文件。例如,要注意 更改文本文件,设置过滤器 属性为“* .txt”。
您有多种类型的更改 可以在目录或文件中查看。 例如,您可以观察更改 在属性中,LastWrite日期和 时间,或文件的大小或 目录。这是通过设置完成的 NotifyFilter属性之一 NotifyFilters值。更多 有关您的更改类型的信息 可以观看,请参阅NotifyFilters。
你可以留意重命名,删除, 或创建文件或目录。 例如,要注意重命名 文本文件,将Filter属性设置为 “* .txt”并调用WaitForChanged 为指定的重命名方法 它的参数。
答案 1 :(得分:5)
我必须为一个程序执行此操作,该程序将查看目录并查看是否添加了任何新图像文件,然后它会自动调整它们的大小。当有人一次添加多个文件时,观察者不会捕获所有文件,因为它是单线程的,并且正在忙于调整一个图像的大小而另一个图像被丢弃。
我不得不把它变成一个多线程的应用程序,其中主线程只是查看目录并将文件添加到队列中,另一个线程将从队列中读取并调整这些图像的大小。
如果您要对文件做任何事情,那么您可能需要小心。