fileSystemWatcher的问题

时间:2011-08-19 19:50:56

标签: c# .net filesystemwatcher

我有两个应用程序CREATOR(我无法修改)和OBSERVER。 CREATOR操纵许多文件,我需要OBSERVER知道何时发生。我在C#中编写了OBSERVER,我正在使用FileSystemWatcher。我将路径设置为路径,将过滤器设置为FILE并添加所有必要的事件。但是当CREATOR修改文件时,OBSERVER中不会引发任何事件。奇怪的是,当我手动修改文件时,OBSERVER 看到更改。我认为CREATOR可能不会释放文件,但是当我关闭CREATOR时,OBSERVER仍然没有看到更改。

知道我做错了吗?

额外细节: 当CREATOR修改文件时,我可以手动删除它,或者当我打开文件时,我看到所有更改都已保存。

修改

我的fileSystemWatcher对象设置:

fileSystemWatcherObs.EnableRaisingEvents = true;
fileSystemWatcherObs.Filter = "kbd.dbf";
fileSystemWatcherObs.IncludeSubdirectories = true;
fileSystemWatcherObs.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Attributes |
    NotifyFilters.CreationTime | NotifyFilters.DirectoryName |NotifyFilters.LastAccess | NotifyFilters.Security |
    NotifyFilters.Size;
fileSystemWatcherObs.Path = "D:\\FOLDER";
fileSystemWatcherObs.SynchronizingObject = this;
fileSystemWatcherObs.Changed += new System.IO.FileSystemEventHandler(  this.fileSystemWatcherObs_Changed );
fileSystemWatcherObs.Created += new System.IO.FileSystemEventHandler( this.fileSystemWatcherObs_Created );
fileSystemWatcherObs.Deleted += new System.IO.FileSystemEventHandler( this.fileSystemWatcherObs_Deleted );
fileSystemWatcherObs.Renamed += new System.IO.RenamedEventHandler( this.fileSystemWatcherObs_Renamed );

当然是这个事件的方法

1 个答案:

答案 0 :(得分:0)

这里有一些提示可能对您有所帮助:

  1. 如果您进行了更改by hand或其他应用程序“您创建者”并不重要,因为当您手动创建它们时,您实际上使用了某些应用程序,如“notepad.exe”或其他内容,所以这不重要。
  2. 您应该将EnableRaisingEvent设置为true“开始观看” 之后设置路径并注册事件处理程序,因此在设置观察程序的所有配置后应该是最后一件事
  3. 在您的NotifyFilter设置整个通知过滤器,这会导致您有时会收到重复通知。
  4. 由于您只想观看特定文件夹,因此您不必包含子文件夹,即fIncludeSubdirectories应为false。
  5. 为什么要将SynchronizingObject设为this?一个更好的,如果你还要是将它带到new object()