围绕FileSystemWatcher.Changed事件编写一个简单的.NET包装器服务

时间:2011-09-06 03:29:55

标签: .net filesystemwatcher

我正在尝试配置一个系统,每当对文件夹中的任何文件进行更改时,Windows备份会不断监视和备份我的Dropbox文件夹(作为Dropbox的“packrat”的更可靠和免费的替代方案) “ 添加在)。理想情况下,如果我可以在发生文件更改事件时调用增量备份,则可以执行此操作。看起来Windows默认情况下没有像这样的事件触发器(至少从我的谷歌搜索),唯一的解决方案是围绕.NET中的FileSystemWatcher.Changed事件编写一个包装类。有些程序会这样做,但对于这么简单的功能它们真的很贵。当他们说“围绕这个事件写一个包装”时,我想知道他们的意思;我知道C和VB的基本编程,但它有相当基本的知识。虽然我觉得如果我足够长时间自己可以做到这一点,但关于过程如何进行的指示将非常有帮助。

我正在寻找的是一个程序/服务,它会不断地监视文件夹,每当该目录中的任何文件被更改或修改时,都会调用exe或bat文件,我们可以将其编程为我们想要的任何内容。

2 个答案:

答案 0 :(得分:1)

我不知道究竟是什么write a wrapper class around FileSystemWatcher.Changed event意味着什么 - 在没有任何背景的情况下有点过于通用。

但是你想在.NET中使用的是FileSystemWatcher类。您需要列出Changed,Created,Deleted和Rename事件以获取每种类型的通知。

documentation for FileSystemWatcher上有一个示例程序,它显示了如何在FileSystemWatcher上设置监听事件。它显示对控制台的所有更改,但您可以将其更改为使用Process.Start()调用批处理文件。

答案 1 :(得分:0)

 static void Main(string[] args)
 {
            FileSystemWatcher fsw = new FileSystemWatcher(@"C:\foo");
            fsw.Created += new FileSystemEventHandler(fsw_Created);
            fsw.Changed += new FileSystemEventHandler(fsw_Changed);
            fsw.EnableRaisingEvents = true;
            Thread.Sleep(System.Threading.Timeout.Infinite);
 }

 static void fsw_Changed(object sender, FileSystemEventArgs e)
 {
      //Existing file has been modified
      Console.WriteLine(e.Name + " has been modified.");
 }

 static void fsw_Created(object sender, FileSystemEventArgs e)
 {
     //A new file has been created
     // put your code here to trigger the othe process
     System.Console.WriteLine(e.Name + " has been created.");
  }

但是我必须警告你:当OnCreated event fires, it also fires the OnChangedEvent立即出现时,你最终可能会触发你的过程超过它所需要的次数。你需要设置一些逻辑来防止这种情况发生。