2011-08-19 58 views
1

我有两个应用程序,CREATOR(我不能修改)和OBSERVER。 CREATOR操纵许多文件,我需要OBSERVER来知道这是什么时候发生的。我用C#编写了OBSERVER,并使用了FileSystemWatcher。我将路径设置为我的路径,将筛选器设置为FILE并添加所有必需的事件。但是,当CREATOR修改文件时,OBSERVER中不会引发任何事件。奇怪的是,当我手工修改文件时,OBSERVER 确实看到了更改。我认为CREATOR可能不会释放该文件,但是当我关闭CREATOR时,OBSERVER仍然看不到更改。问题fileSystemWatcher

任何想法我做错了什么?

额外的详细信息: 当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); 

,当然方法为这个事件

+0

请阅读此:http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – Oded

+0

因此,你有一个应用程序修改文件,而你用filesystemwatcher编写和应用程序来检查这些修改,但它没有注意到你的“创建者”应用程序何时修改它们?请发布您的“观察员”应用程序的相关代码。 – Aerik

+0

是的,确切地说。我不知道我在做什么错误 – nirmus

回答

0

这里有一些提示,也许可以帮助你:

  1. 一点也没有”无论你做出更改by hand还是其他应用程序“你创建者”,si当你手工制作它们时,你实际上使用了一些应用程序,如“notepad.exe”或其他东西,所以这并不重要。
  2. 您应该设置EnableRaisingEvent为真“开始观看”之后您设置了路径并注册了事件处理程序,因此在设置观察程序的所有配置之后它应该是最后一件事情。
  3. 在您的NotifyFilter正在设置整个通知过滤器,这将导致您有时收到重复通知。
  4. 既然你只想看一个特定的文件夹,那么你不必包含子文件夹,即fIncludeSubdirectories应该是错误的。
  5. 为什么你要设置SynchronizingObjectthis?一个更好的如果你不得不是要把它带到new object()
+0

当我通过鼠标单击设置某个属性时,此设置由visual studio生成。你的提示很有帮助,但我知道。使用提示更改后不起作用。 – nirmus

+0

无关紧要,您设置了多标志,可以使您接收重复的通知,如:NotifyFilters.LastWrite和NotifyFilters.Attributes将接收重复通知当文件发生变化时,一个用于最后写入,另一个用于属性... –