2015-06-12 19 views
0

在我创建了一个监控所在的目录路径是可配置的通过引用一个配置文件这样的Windows服务在过去的:多个配置FileSystemWatcher的方法

fileSystemWatcher1.Path = ConfigurationManager.AppSettings["WatchPath1"]; 

我也通过定义多个观看多个可配置路径fileSystemWatcher方法。

 fileSystemWatcher1.Path = ConfigurationManager.AppSettings["WatchPath1"]; 
     fileSystemWatcher2.Path = ConfigurationManager.AppSettings["WatchPath2"]; 
     fileSystemWatcher3.Path = ConfigurationManager.AppSettings["WatchPath3"]; 

上述工作,如果我知道的手,我有可能会多少文件夹,监视,所以我的问题是,我可以采取什么办法,使这个充满活力的时候,我不知道有多少文件夹必须是前监控?我想要做的是继续使用配置或XML文件,并为每个条目创建FileSystemWatcher与文件中指定的路径。

我还需要能够动态地为每个FileSystemWatcher创建一个方法,以便在文件系统事件触发时执行特定操作。

实施例的代码来动态创建的:

private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e) 
      { 
       Library.WriteErrorLog("New file detected in watch folder. File: " + e.FullPath); 
       // Do stuff with file 
      } 

这是可能的?如果是的话,我怎么能够实现这一目标呢?

回答

1

存储您启动该类时初始化的FileSystemWatcher对象的列表。

List<FileSystemWatcher> fsWatchers = new List<FileSystemWatcher>(); 

要添加新的观察者......

public void AddWatcher(String wPath) { 
    FileSystemWatcher fsw = new FileSystemWatcher(); 
    fsw.Path = wPath; 
    fsw.Created += file_OnCreated; 
    fsw.Changed += file_OnChanged; 
    fsw.Deleted += file_OnDeleted; 
    fsWatchers.Add(fsw); 
} 

private void file_OnDeleted(object sender, FileSystemEventArgs e) { 

} 

private void file_OnChanged(object sender, FileSystemEventArgs e) { 

} 

private void file_OnCreated(object sender, FileSystemEventArgs e) { 

} 

在每个事件处理程序,投发件人一个FileSystemWatcher的,如果你需要直接与它交互。 要获取完整路径,请使用事件参数对象(e)上的get方法。

通过为FileSystemWatcher上的所有事件分配单个事件处理程序,您可能会简化它。

private void file_OnFileEvent(object sender, FileSystemEventArgs e) { 
    String path = e.FullPath; 
    if (e.ChangeType == WatcherChangeTypes.Changed) { 

    } else if (e.ChangeType == WatcherChangeTypes.Created) { 

    } 
} 
+0

有没有办法检查用户或用户的更改? –

+0

当你说'检查用户'时,我认为你的意思是检查哪个用户更改了文件?如果是这样,看看这个线程。这个问题在之前已经出现,但它看起来像是一个棘手的问题。 http://stackoverflow.com/questions/11660235/find-out-usernamewho-modified-file-in-c-sharp – Alex

+0

看起来像它的那里,谢谢将玩,如果我曾经去过那个项目 –