指定したファイルのパスを取得する
                                                           玄関へお回り下さい。   
指定したファイルのパスを取得する(サブフォルダー以下検索)      (141)
    
Option Explicit  
'SampleNo=141 WindowsXP VB6.0(SP5) 2002.05.17

'指定されたファイルのディレクトリツリーを検索します。

Private Declare Function SearchTreeForFile Lib "imagehlp.dll" _
  (ByVal RootPath As String, ByVal InputPathName As String, _
   ByVal OutputPathBuffer As String) As Long


Private Sub
Command1_Click()
  Dim myPath As String
      '最後の ¥ は付けなくてもOK
  myPath = fFilePath("C:\Windows\", "Regedit.exe")
End Sub

'**************************************************************
' 指定されたファイルのディレクトリツリーを検索します
' 使用例    :myPath = fFilePath("C:\Windows\", "Regedit.exe")
' RootFolder :検索開始フォルダー名
' FileName  :検索するファイル名
' 返り値     :見つかったファイルのフルパス
'**************************************************************
Private Function fFilePath(ByVal RootFolder As String, _
              ByVal FileName As String) As String
  Dim Ret As Long
  Dim strBuffer As String
  strBuffer = String$(256, Chr$(0))
  Ret = SearchTreeForFile(RootFolder, FileName, strBuffer)
  If Ret Then
    fFilePath = Left$(strBuffer, InStr(strBuffer, vbNullChar) - 1)
  Else
    fFilePath = "File Not Found"
  End If
End Function

 
SearchTreeForFile APIを使用すればご覧のように簡単な記述でファイルが検索できま
すが、同じ名前のファイルが複数存在する場合は、最初に見つかったファイルのパスしか
返しません。
又、カレントフォルダーを指定するとカレントフォルダーに見つからない場合ルートディレクトリ
から探します。
スタートフォルダーは解る範囲で絞り込んで記入した方が検索時間は早いです。
色々、試して頂いてこのAPIの特徴に応じた使い方をして下さい。
当然ながらヌル値を指定するとエラーとなりますので事前に処置しておいて下さい。

    




2002/05/18