2017-06-19 37 views
0

我被困在這個排序問題上。如何獲取按時間戳排序的目錄文件列表?

Private Sub ... 
     Dim oDirInfo As DirectoryInfo 
     Dim aoFSInfo() As FileSystemInfo 
     Dim asFiles() As String 

FQPN是以「\ *。*」結尾的標準路徑名。

 oDirInfo = New DirectoryInfo(FQPN) 

現在進入asFiles我想要文件的名稱,按文件的時間戳按升序排序。我猜想,oDirInfo.CreationTime在這裏扮演一個角色,但無法弄清楚如何正確使用OrderBy

 aoFSInfo = oDirInfo.GetFileSystemInfos() '? 
     asFiles = aoFSInfo.OrderBy(...) 
    End Sub 

回答

2

是的,這就是LINQ,你可以使用這個(方法 - )語法:

asFiles = oFSInfo. 
    OrderBy(Function(fsi) fsi.CreationTime). 
    Select(Function(fsi) fsi.FullName). 
    ToArray() 

如果你不喜歡ugly Function keyword您可以使用查詢語法:

Dim orderedFiles = From fsi In oFSInfo 
        Order by fsi.iCreationTime Ascending 
        Select fsi.FullName 
asFiles = orderedFiles.ToArray() 

即使這些是兩個語句,由於延遲執行,它也不會慢於方法語法。

+0

使用查詢語法時,可以在查詢周圍放置()並追加.ToArray。 – dbasnett

+0

@dbasnett:是的,但這會破壞可讀性,這是將其拆分爲兩部分的原因。沒有理由避免第二種說法。它甚至可以根據需要重新使用查詢。 –

+0

@TimSchmelter。小錯字由於總共只有3個字母,我無法更正。兩次修飾:'oFSInfo'代替'aoFSInfo'來反映OP中的變量;一旦語法:成員'iCreationTime'應該讀取'CreationTime'。 - 也許不是太重要,但我可能會去完整聲明'Dim orderedFiles As IEnumerable(Of String)...' - 否則:謝謝你的回答。 – Herb

相關問題