簡體   English   中英

文件系統監視程序-文件夾已刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM