繁体   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