- 日時: 2007/08/25 08:49
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[ファイル][データベース][] * * キーワード:ソート,ファイルリストボックス,,,, * ***********************************************************************************
元質問:ファイル名取得 - rie 2005/02/10-15:26 No.2077 ファイル名を更新日付順やサイズ順に取得したいのですが、dir関数ではソートは出来ないようなのですが、どなたかご教授ください。
---------------------------------------------------------------------------------- Re: ファイル名取得 - 魔界の仮面弁士 2005/02/10-16:18 No.2080 ----------------------------------------------------------------------------------
ファイルシステム自体には、ソートされた形で情報が格納されているわけではないので、 基本的には、格納順にしか取り出せないと思います。
Dir関数で取得した結果を、自前でソートすることで対処してください。 並び替えのコードを書くのは、それほど難しい事では無いでしょうし。
例えば、配列に格納してソートするなら、このようなサンプルがあります。 http://support.microsoft.com/default.aspx?scid=kb;ja;169617
あるいは、ADODB.Recordsetに格納しておいて Sort プロパティを使うとか、 ListBox, ListView, MSHFlexGrid 等のソート機能を利用する手もありますね。
どの方法を使っても並び替えは可能ですが、今回のように、並び替える項目数が 複数ある場合には、Recordsetを使うと、応用が利くかと思います。
参照設定で Microsoft ActiveX Data Objects *.* Library にチェックを入れておいて下さい
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
|