文件系统观察程序 - 删除文件夹

时间:2010-05-06 09:05:36

标签: vb.net filesystemwatcher

我正在写一个服务来监视不同文件夹中是否存在不同的文件... 我正在使用filesystemwatchers来获取事件。

作为部署的一部分,其中一个已观看的文件夹会被删除,并且会不时创建新文件夹。

结果服务抛出错误并停止...

是否有可能捕获到那种错误并通过服务在新文件夹上重新创建filewatcher?

2 个答案:

答案 0 :(得分: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);

    }
}

答案 1 :(得分:0)

您可以使用.deleted事件处理此问题。但是,如果删除分配给filesystemwatcher.Path的目录,则可能会导致错误。解决此问题的一种方法是将监视目录的父级分配给filesystemwatcher.Path。然后它应该在.deleted事件中捕获删除。

如果您尝试访问刚刚删除的目录,也可能在处理程序中出现错误。当发生这种情况时,您可能无法获得正常的断点,而这似乎是由删除本身引起的。