2014-01-21 22 views
0

我需要複製文件後,它已被創建和更改兩次。需要複製文件後,它的創建和更改

我不知道該怎麼做,除了使用3個FileSystemWachers。第一個是創造,第二個是變化。

有沒有更簡單的方法?

+1

一個FileSystemWacher就足夠了。但除了爲你寫信之外,我們該如何回答? –

回答

0

FileSystemWatcherseveral events,您可以使用它來偵聽文件系統上不同類型的事件。還有一個NotifyFilter屬性,您可以使用它來指定應該監視哪些事件類型。

所以你不需要使用三個不同的觀察者;一個就足夠了。您只需要某種形式的計數器來跟蹤文件所做的更改。這裏有一個簡單的例子:

Dictionary<string, int> changeCounter = new Dictionary<string, int>(); 

... 

FileSystemWatcher watcher = new FileSystemWatcher(); 
watcher.Path = @"C:\Path\To\Some\Folder"; 
watcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.LastWrite; 
watcher.Created += OnCreated; 
watcher.Changed += OnChanged; 

... 

private void OnCreated(object source, FileSystemEventArgs e) 
{ 
    changeCounter.Add(e.FullPath, 0); 
} 
private void OnChanged(object source, FileSystemEventArgs e) 
{ 
    if (changeCounter.ContainsKey(e.FullPath)) 
    { 
     changeCounter[e.FullPath]++; 
     if (changeCounter[e.FullPath] == 2) 
     { 
      CopyFile(e.FullPath); 
     } 
    } 
} 

這隻會叫CopyFile後觀察者檢測到的文件創建事件和單個文件中的兩個文件變更事件。如果您擔心一旦創建,編輯,刪除,重新創建和編輯文件,您可能還想要修改句柄刪除操作—這會觸發CopyFile,即使在技術上該文件僅在編輯後才被編輯過一次創建。

相關問題