2017-06-19 40 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

相关问题