VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -