2010-05-06 72 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事件中的刪除。

如果您嘗試訪問剛刪除的目錄,也可能在處理程序中出現錯誤。發生這種情況時,您可能無法獲得正常的斷點,看起來它是由刪除本身引起的。