VB6.0でのDir()関数の使い方


VBで指定されたメンバー関数dirは、指定されたタイプまたは指定されたファイル属性を満たすファイル名、ディレクトリ名またはボリュームのラベル名を返します.dir関数の構文構造は、次のとおりです.
Member Function Dir[(Pathname[,attributes])] As String 
パラメータPathnameは通常、ディレクトリまたはフォルダ、およびドライブシンボルを含むファイル名です.指定したPathnameが見つからない場合、dir文はゼロ長の文字列("")を返し、マルチ文字ワイルドカードおよびシングル文字ワイルドカードをサポートします.次の点に注意してください.
  1.プログラムでdir関数を最初に呼び出すときにpathnameパラメータを指定する必要があります.そうしないと、実行エラーが発生します.
  2.dir関数はpathname条件を満たす最初のファイル名またはディレクトリ名のみを返します.残りの条件を満たすファイル名を得るには、パラメータを持たずにdir関数を再度呼び出すことができます.一致するファイルがない場合、dir関数はゼロ長の文字列を返します.この場合、dir関数を呼び出したい場合は、pathnameパラメータを指定する必要があります.そうしないと、実行エラーが発生します.
  3.現在のpathnameマッチング条件を満たすファイルが取得されない場合、新しいpathname値を変更できますが、dir関数を再帰的に呼び出すことはできません.
  4.dir関数を呼び出すときに属性パラメータをvbdirectoryに設定しても、サブディレクトリは連続的に返されず、現在のディレクトリの下のディレクトリのみが返されます.
  
例1
Public Sub main() 
Dim filenames As String 
filenames = Dir("c:\", vbNormal + vbDirectory) 
Do While filenames <> "" 
Debug.Print filenames 
filenames = Dir ’    dir  ,         
Loop 
End Sub
 
例2
’条件に合致する条件とディレクトリを分類し、対応する配列に格納し、出力を完了する
Public Sub main() 
 Dim FileNames As String, DirNames As String 
 Dim FileArray() As String, DirArray() As String 
 Dim TotalDirs As Integer, TotalFiles As Integer 
 Dim iLoop As Integer 

 DirNames = "c:\" 
 FileNames = Dir(DirNames ,vbNormal + vbDirectory) 
 Do While FileNames <> "" 
  If FileNames <> "." And FileNames <> ".." Then 
   If (GetAttr(DirNames & FileNames) And vbDirectory) = vbDirectory Then 
    TotalDirs = TotalDirs + 1 
    ReDim Preserve DirArray(TotalDirs) 
    DirArray(TotalDirs) = FileNames 
   Else 
    TotalFiles = TotalFiles + 1 
    ReDim Preserve FileArray(TotalFiles) 
    FileArray(TotalFiles) = FileNames 
   End If 
  End If 
  FileNames = Dir 
 Loop 
 ’          ,    
 Debug.Print "___Directories______" 
 For iLoop = 0 To UBound(DirArray) 
  Debug.Print DirArray(iLoop) 
 Next 
 Debug.Print "___Files____" 
 For iLoop = 0 To UBound(FileArray) 
  Debug.Print FileArray(iLoop) 
 Next 
End Sub  

Dir関数は、ネイティブにファイルまたはディレクトリがあるかどうかを判断しないでバックグラウンドでユーザーが探して提示するのを助け、runなどの指定操作を完了するために、そのファイルまたはディレクトリを使用します.しかし、再帰的に使用できないため、ツリー全体を一度に検索することはできません.さらに悪いことに、vbは複数の知らないディレクトリで特定のファイルまたはファイルクラスタを検索するためのツールを提供していません.幸いなことにwin 32 apiは、いくつかのファイル検索方法(SearchPath,FindFirstFile,FindNextFileなど)を提供しています.また、既存のファイル検索知識を利用して、ユーザーが1つを選択できるように、検索したファイルを表示するlistboxコントロールを作成することもできます.ディスカッショングループに入ってディスカッションします.