2010-09-10 153 views
1

我有一組子文件夾,深度超過20k個文件,在c:\MyData子文件夾遍歷

有一個在e:\projects\massdata

我想在C和已經存在於E東西(同一個文件夾名,文件名相同,大小相同),我想查一個幾乎相同的一組我的E盤上的子文件夾從C中刪除。

穿越此文件夾結構的最佳方式是什麼?

+1

你想如何確定相同性 - 文件名,日期,大小,校驗和,完整的內容比較? – RedFilter 2010-09-10 18:56:44

+0

@RedFilter問題更新 – 2010-09-10 18:57:47

+0

這裏有一些[免費源代碼](http://www.codeproject.com/KB/files/kratfoldersync.aspx),可能會幫助您開始。 – 2010-09-10 18:59:56

回答

2

以遞歸方式遍歷每個目錄中的所有文件。

hashMap中創建描述E中文件的相對路徑,文件大小等的字符串。然後檢查是否存在特定的文件相對路徑,何時通過C,如果是,則刪除它。

該字符串可能是例如[FILENAME] ## [FILESIZE] ## [LASTEDITER]。

這裏是一個在C#遞歸搜索的一種方式: http://support.microsoft.com/kb/303974

3

有關使用連接操作如何。更新後加入的文件名這樣

public void cleanUp() 
    { 
     var cFiles = Directory.GetFiles(@"c:\MyData","*.*",SearchOption.AllDirectories); 
     var fFiles = Directory.GetFiles(@"e:\projects\massdata","*.*",SearchOption.AllDirectories); 
     Func<string, string, Tuple<string, long>> keySelector = (path, root) => 
      new Tuple<string, long>(path.Replace(root, ""), new FileInfo(path).Length); 

     foreach (var file in cFiles.Join(fFiles, f => keySelector(f,@"e:\projects\massdata"), c => keySelector(c,@"c:\MyData"), (c, f) => c)) 
     { 
      File.Delete(file); 
     } 
    } 

第二個編輯: 的關鍵選擇現在應該滿足您的要求。如果我誤解了他們。這確實很容易,所以看看你需要改變。如果不刪除評論:)