2016-12-12 112 views
-3

我需要在目錄中找到兩個最新的文件。如何在目錄中找到兩個最新的文件?

我能找到第一個使用此代碼:

var directory = new DirectoryInfo("f:\\PAB\\bil_prev_ent"); 
var firstfile = (from f in directory.GetFiles("*.pdf") 
       orderby f.LastWriteTime descending 
       select f).First(); 

我想知道我怎麼能找到第二個文件了。使用代替

+4

'。拿(2)'代替'First()'? –

+0

@DmitryBychenko抱歉,dint請參閱您的評論 – Sajeetharan

+0

@Sajeetharan:沒關係;可能是一個* materiazation *(比如,'.ToArray()')應該在答案中提到(「我怎樣才能找到第二個文件」 - 'myfiles [1]')。 –

回答

5

創建一個查詢,然後選出你需要的,fo R實施例:

var orderedFiles = directory.EnumerateFiles("*.pdf") 
    .OrderByDescending(f => f.LastWriteTime); 

var newestTwo = orderedFiles.Take(2).ToList(); 

我用EnumerateFiles,因爲它並不需要將所有文件加載到內存中。

+0

這有一個缺陷。看到我上面的評論 – Bauss

+0

@Bauss:只有OP知道他想要什麼文件,如果他想根據LastWriteTime(最近修改的文件)最後兩個文件,那麼他有權做。我不明白這與這個問題有什麼關係。 –

+0

這就像一個魅力,但我使用ToArray喜歡建議 – Roberto

6

Take(n)First()

var myfiles = (from f in directory.GetFiles("*.pdf") 
       orderby f.LastWriteTime descending 
       select f).Take(2); 

以上將給如果你需要的是最近創建的文件,這是最近修改

的文件,使用CreationTime

var myfiles = (from f in directory.GetFiles("*.pdf") 
          orderby f.CreationTime descending 
          select f).Take(2); 
+0

這有一個缺陷。它只找到兩個最後修改的文件。 – Bauss

+0

@Bauss是修改 – Sajeetharan

0

我需要的邏輯是「CreationTime」。 解決方案3的工作方式像一個魅力,但我用ToArray。

所以正確的代碼是:

var directory = new DirectoryInfo("f:\\PAB\\bil_prev_ent"); 
var orderedFiles = directory.EnumerateFiles("*.pdf").OrderByDescending(f => f.CreationTime); 
var newestTwo = orderedFiles.Take(2).ToArray(); 
0

答2:

現在的文件是不完整路徑。

我怎麼能有完整的路徑?

相關問題