投稿時間:2005/02/10(Thu) 16:18 投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:Re: ファイル名取得
> ファイル名を更新日付順やサイズ順に取得したいのですが > dir関数ではソートは出来ないようなのですが、
ファイルシステム自体には、ソートされた形で情報が格納されているわけではないので、 基本的には、格納順にしか取り出せないと思います。
Dir関数で取得した結果を、自前でソートすることで対処してください。 並び替えのコードを書くのは、それほど難しい事では無いでしょうし。
例えば、配列に格納してソートするなら、このようなサンプルがあります。 hhttp://support.microsoft.com/default.aspx?scid=kb;ja;169617
あるいは、ADODB.Recordsetに格納しておいて Sort プロパティを使うとか、 ListBox, ListView, MSHFlexGrid 等のソート機能を利用する手もありますね。
どの方法を使っても並び替えは可能ですが、今回のように、並び替える項目数が 複数ある場合には、Recordsetを使うと、応用が利くかと思います。
Private Sub Command1_Click() 'Recordsetを作成 Dim RS As ADODB.Recordset Set RS = New ADODB.Recordset RS.Fields.Append "Name", adVarWChar, 256 RS.Fields.Append "Date", adDate RS.Fields.Append "Size", adInteger RS.Open
'データを格納 Dim Path As String Path = Dir("C:\WINDOWS\Help\*.*") Do Until Path = "" RS.AddNew "Name", Path RS.Collect("Date") = FileDateTime("C:\WINDOWS\Help\" & Path) RS.Collect("Size") = FileLen("C:\WINDOWS\Help\" & Path) RS.Update Path = Dir() Loop
If RS.RecordCount = 0 Then MsgBox "該当データなし" RS.Close Set RS = Nothing Exit Sub End If
'ソート If Option1.Value = True Then RS.Sort = "Name" 'ファイル名順 ElseIf Option2.Value = True Then RS.Sort = "Date DESC" '日付順の降順 Else RS.Sort = "Size,Date,Name" 'サイズ,日付,名前順 End If RS.MoveFirst
'表示 'Debug.Print RS.GetString Do Until RS.EOF Debug.Print RS.Collect("Name"); Tab(30); Debug.Print Format(RS.Collect("Date"), "yyyy-mm-dd hh\:nn\:ss"), Debug.Print FormatNumber(RS.Collect("Size") / 1024, 1); " KB" RS.MoveNext Loop
RS.Close Set RS = Nothing End Sub
|