tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
ファイル名を更新日順やサイズ順に取得(VB6.0) ( No.0 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]