2011-09-06 17 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