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