2013-08-23 125 views
2

以外的元素下面我有一個方法,應該刪除除最新的文件的所有版本。我的Except調用不會產生我期待的結果,再次查看文檔後,我似乎無法理解爲什麼。爲了調試的目的,我將LINQ查詢的Except移出了我的foreach條件。當我調試newest被正確設置爲最近的日誌文件後,下一行執行toDelete仍然包含newest,爲什麼?我在這裏錯過了什麼?所有相關的代碼如下。該方法被稱爲傳遞文件設置爲日誌名稱的靜態部分,之後它有一個時間戳。 Where(x => x.Contains(file))的工作方式與我預期的完全相同。刪除除了

public static void CleanUpLocalCopies(string file) 
{ 
    string[] localFiles = Directory.GetFiles(".\\"); 

    string newest = files.Where(x => x.Contains(file)).OrderByDescending(x => x).FirstOrDefault(); 
    var toDelete = localFiles.Where(x => x.Contains(file)).Except(new string[] { newest }); 

    foreach (string f in toDelete) 
    { 
     File.Delete(f); 
    } 
} 

回答

0

在這種情況下,你可以使用跳過,直接跳過第一個文件,並避免Except電話:

var toDelete = files.Where(x => x.Contains(file)).OrderByDescending(x => x).Skip(1); 
+0

這個工程,是一個更好的解決辦法,因爲我會接受它。但是,偶然你能解釋爲什麼我的「Except」不工作? – evanmcdonnal

+0

@evanmcdonnal很難說 - 你發佈的代碼實際上並沒有按原樣編譯,所以我不能看到它到底有什麼問題;) –

+1

@evanmcdonnal我試過了,用'localFiles'替換'files'沒有編譯),並且它工作正常。如果我有3個名爲'abc'的文件後跟時間戳,toDelete包含2個最早的文件。 –