投稿日 | : 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