[英]File System Watcher - Folder Deleted
我正在寫一項服務來監視不同文件夾中存在的不同文件...我正在使用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事件中捕獲刪除。
如果您嘗試訪問剛剛刪除的目錄,則處理程序中也可能出現錯誤。 發生這種情況時,您可能無法獲得正常的斷點,這似乎是由刪除本身引起的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.