我正在使用类似以下方式使用 FileSystemWatcher 监控文件夹:
watcher = new FileSystemWatcher(folder);
watcher.NotifyFilter = NotifyFilters.Size;
watcher.Changed += changedCallback;
打开同一文件夹中的Notepad新文件并保存时,我会收到通知。 如果我继续编写然后保存,我会收到通知。 如果我关闭文件而不保存,则会收到通知。 这正是我想要的。但是,如果我在该文件夹中创建一个文件,并将其共享模式设置为FileShare.Read,然后再对其进行写入,直到关闭该文件之前,我将不会收到任何通知。 另一个解决方法是打开该文件(例如在记事本中),这显然会导致其状态更新,然后我的监控应用程序会收到通知。 另一个解决方法是在Windows资源管理器中可以刷新的操作,它也会导致文件状态更新。
有趣的是,当我查看Windows资源管理器时做出更改时,我注意到:
1. 如果文件被共享以供读取和写入,则只要我保存文件,文件大小就会立即在Windows资源管理器中更新。 2. 如果文件仅供读取共享,则除非我手动刷新窗口,否则其大小将不会立即在Windows资源管理器中更新。
因此,似乎我的监视应用程序与Windows资源管理器具有相同的行为。 我正在考虑运行一个线程,只需扫描文件夹中的文件,但我想知道在这种情况下是否有更优雅的解决方法。
顺便说一句,我正在使用Win7,不确定其他Windows版本是否也有此问题。
谢谢!