2010-05-06 98 views
0

我正在写一个服务,以观察在不同的文件夹中是否存在不同的文件... 我正在使用filesystemwatchers来获取事件。文件系统监视器 - 删除文件夹

作为部署的一部分,被观察文件夹中的一个被删除并且不时创建新文件夹。

因此,该服务将引发错误,并停止...

是否有可能赶上那样的错误,并重新由服务新文件夹的filewatcher?

回答

0

抓住已删除的事件,然后重新安排定时轮询观看新的?

我没有编译器现在就手,但我敲了这个伪代码:

using System; 
using System.IO; 


    public class Watcher : IDisposable{ 

    void Dispose(){ watcher.OnDeleted -= onDelete; } 


    string file; 
    FileSystemWatcher watcher; 
    FileSystemEventHandler onDelete; 

     public class Watch(string file, FileSystemEventHandler onDelete) { 
     this.file = file; 
     watcher = new FileSystemWatcher{ Path = file } 
     this.OnDelete = onDelete; 
     watcher.Deleted += onDelete; 
     watcher.NotifyFilter = ...; // looking for delete event; 
      // Begin watching. 
      watcher.EnableRaisingEvents = true; 
    } 
    } 


    public static class watch { 

    Watcher watcher; 

     public static void Main() { 



     watcher = new Watcher("somedir", ondeleted); 
     SetUpChangeWatchers(); 
     while(true){ 
      // stuff! 

     } 

     CleanUpChangeWatchers();  
     }  


    private static void ondeleted(object source, RenamedEventArgs e){ 
     CleanUpChangeWatchers(); 
     watcher.Dispose(); 

     while(!directoryRecreated(file)){ 
      Thread.Sleep(...some delay..); 
     } 
     SetUpChangeWatchers(); 
     watcher = new Watcher("somedir", ondeleted); 

    } 
} 
+0

请原谅格式化,我在记事本上的媒体中心做了大声笑 – 2010-05-06 09:24:38

0

您可以用.deleted事件处理这个问题。但是,如果删除分配给filesystemwatcher.Path的目录,则可能会导致错误。解决这个问题的一种方法是将所监视目录的父对象分配给filesystemwatcher.Path。然后它应该捕获.deleted事件中的删除。

如果您尝试访问刚删除的目录,也可能在处理程序中出现错误。发生这种情况时,您可能无法获得正常的断点,看起来它是由删除本身引起的。