2017-06-19 5 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だとあなたがこの(METHOD-)構文を使用することができます:あなたは、クエリの構文を使用することができますugly Function keywordが気に入らない場合

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

を:

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

をこれらが2つのステートメントであっても、が延期されているためにメソッド構文より遅くはありません。が実行されます。

+0

クエリ構文を使用するときは、クエリの前後に()を置き、.ToArrayを追加できます。 – dbasnett

+0

@dbasnett:はい、それは2つに分割する理由であった可読性を破壊します。 2番目の声明を避ける理由はありません。必要に応じてクエリを再利用することもできます。 @TimSchmelter。 –

+0

小さな誤植私は合計でわずか3文字であるために修正できません。 OPの変数を反映するために 'aoFSInfo'の代わりにcosmetical:' oFSInfo'を2回繰り返します。一度構文的に:メンバー 'iCreationTime'は' CreationTime'を読みます。 - それほど重要ではないかもしれませんが、私はおそらく完全な宣言 'Dim orderedFiles IEnumerable(Of String)...'に行くでしょう - そうでなければ:あなたの答えをありがとう。 – Herb

関連する問題