2011-09-06 67 views
0

我试图配置一个系统,我的Dropbox文件夹不断被监视,并通过Windows备份增量备份,只要对文件夹中的任何文件进行更改(作为Dropbox的“packrat”插件的更可靠和免费的替代品)。理想情况下,如果我可以在发生文件更改事件时调用增量备份,则可以完成此操作。看起来像Windows默认情况下没有这样的事件触发器(至少从我的google搜索),唯一的解决方案是围绕.NET中的FileSystemWatcher.Changed事件编写一个包装类。有些程序会这样做,但对于这样一个简单的功能来说,它们确实很昂贵当他们说“围绕这个事件写封皮”时,我想知道他们的意思。我知道C和VB中的基本编程,但其相当基本的知识。虽然我觉得我可以自己做,如果我足够长时间,指出这个过程将如何进行将是非常有益的。围绕FileSystemWatcher.Changed编写一个简单的.NET包装服务事件

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

回答

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立即和你最终可能会引发你的过程更多的时间比它需要。你需要设置一些逻辑来防止这种情况发生。

+0

非常感谢!这正是我所寻找的,你让我的生活变得更容易!我想我只会放一些计时器,确保它不会每隔5-10分钟触发一次以上... – mamabiskothu

+0

@mamabiskothu很高兴它会帮助你。请不要忘记接受答案。 – Icarus

1

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

但是你想在.NET中使用的是FileSystemWatcher类。您需要列出更改,创建,删除和重命名事件以获取每种类型的通知。

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

+0

感谢您指出了这一点! – mamabiskothu