2009-07-13 48 views
1

我正面臨filewatcher的一個問題。我的要求是,當我們複製大小超過1 GB的大文件夾時,FSW應只記錄X創建的文件夾中的一個更改,但不會給出X下文件的創建事件。並且我想計算MD5 Checksums所有那些用「X」文件夾複製的文件。由於複製大文件花費了大量時間,我無法獲取X下的所有文件和子文件夾名稱。我需要將所有文件路徑添加到字典數據結構中。 你能否就此提出建議。FileSystemWatcher

public static string[] GetFilesAndFolders(string path) 
    { 
     foreach (string dirs in Directory.GetDirectories(path)) 
     { 
      fileandFolderNames[counter] = dirs; 
      counter++; 
      foreach (string files in Directory.GetFiles(dirs)) 
      { 
       fileandFolderNames[counter] = files; 
       counter++; 
      } 
      GetFilesAndFolders(dirs); 
     } 
     return fileandFolderNames; 
    } 
+0

還有一點點主題評論,爲什麼你在函數名中寫小寫'和'?它會用大寫字母更易讀,例如 - getFilesAndFolders。 – 2009-07-13 12:32:42

回答

3

由於複製大文件夾是不是一個單一的操作,而是由許多單獨的複製操作中,FileSystemWatcher對象不能確定何時整個文件夾的複製操作完成。因此,它會分別向您發送有關每個文件的通知。我的建議是分別處理每個文件。當它被複制時(觸發FileSystemWatcher事件),計算MD5並將其放入字典中。

0

你應該知道的一件事是遞歸複製所有文件和文件夾是一個等待發生的堆棧溢出。有關如何將目錄層次結構變爲非遞歸IEnumerable類,請參見this questionthis blog post