我正在寫一個服務,以觀察在不同的文件夾中是否存在不同的文件... 我正在使用filesystemwatchers來獲取事件。文件系統監視器 - 刪除文件夾
作爲部署的一部分,被觀察文件夾中的一個被刪除並且不時創建新文件夾。
因此,該服務將引發錯誤,並停止...
是否有可能趕上那樣的錯誤,並重新由服務新文件夾的filewatcher?
我正在寫一個服務,以觀察在不同的文件夾中是否存在不同的文件... 我正在使用filesystemwatchers來獲取事件。文件系統監視器 - 刪除文件夾
作爲部署的一部分,被觀察文件夾中的一個被刪除並且不時創建新文件夾。
因此,該服務將引發錯誤,並停止...
是否有可能趕上那樣的錯誤,並重新由服務新文件夾的filewatcher?
抓住已刪除的事件,然後重新安排定時輪詢觀看新的?
我沒有編譯器現在就手,但我敲了這個僞代碼:
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);
}
}
您可以用.deleted事件處理這個問題。但是,如果刪除分配給filesystemwatcher.Path的目錄,則可能會導致錯誤。解決這個問題的一種方法是將所監視目錄的父對象分配給filesystemwatcher.Path。然後它應該捕獲.deleted事件中的刪除。
如果您嘗試訪問剛刪除的目錄,也可能在處理程序中出現錯誤。發生這種情況時,您可能無法獲得正常的斷點,看起來它是由刪除本身引起的。
請原諒格式化,我在記事本上的媒體中心做了大聲笑 – 2010-05-06 09:24:38