[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/10(Thu) 15:26
投稿者名:rie
URL :
タイトル:
ファイル名取得
ファイル名を更新日付順やサイズ順に取得したいのですが
dir関数ではソートは出来ないようなのですが、
どなたかご教授ください。

投稿時間:2005/02/10(Thu) 16:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ファイル名取得
> dir関数ではソートは出来ないようなのですが、
ここにソートのプログラムがあるのでそれで並べ替えを行うか、ListView コントロールや
ListBox コントロール等のソート機能を利用するかして下さい。
MSFlexGrid コントロールを利用するが簡単かも。

投稿時間: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

投稿時間:2005/02/10(Thu) 17:37
投稿者名:rie
URL :
タイトル:
ありがとうございました。
やっぱり自分でしないとダメなんですね。
サンプルを見ながらがんばってみます。

花ちゃんさん、魔界の仮面弁士さん
ありがとうございました。

投稿時間:2005/02/10(Thu) 17:51
投稿者名:いな
Eメール:
URL :
タイトル:
Re: ありがとうございました。
hhttp://www.takeittechies.com/vbtomo/boards/vbchoshoqa.php?do=leaf&num=3924

ンでもって、こちらは、放置の予感