APIs: Repérer un fichier |
Author(s) Dev Ashish |
|
(Q) Comment chercher mon disque rigide pour trouver un fichier de nom donné? comment
obtenir son répertoire?
(A) Le premier exemple est pour Access 97 seulement, pour Access 95, voir
l'alternative.
On peut utiliser l'objet FileSearch d'Office 97, mais pour ce faire, s'assurer de
cocher "Microsoft Office 8.0 Object Library" ( MSO97.DLL dans le
répertoire d' Office ) sous Tools/References (Outils/Librairies) avant d'exécuter le
code suivant.
Copier-coller le code suivant dans un nouveau module.
Function fReturnFilePath(strFilename As String, _
strDrive As String) As String
Dim varItm As Variant
Dim strFiles As String
Dim strTmp As String
If InStr(strFilename, ".") = 0 Then
MsgBox "Désolé!! Le nom complet est requis", vbCritical
Exit Function
End If
strFiles = ""
With Application.FileSearch
.NewSearch
.LookIn = strDrive
.SearchSubFolders = True
.FileName = strFilename
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
If .Execute > 0 Then
For Each varItm In .FoundFiles
strTmp = fGetFileName(varItm)
If strFilename = strTmp Then
fReturnFilePath = varItm
Exit Function
End If
Next varItm
End If
End With
End Function
Private Function fGetFileName(strFullPath) As String
Dim intPos As Integer, intLen As Integer
intLen = Len(strFullPath)
If intLen Then
For intPos = intLen To 1 Step -1
If Mid$(strFullPath, intPos, 1) = "\" Then
fGetFileName = Mid$(strFullPath, intPos + 1)
Exit Function
End If
Next intPos
End If
End Function
Puis, à partir de votre code, appeler la fonction un peu comme suit:
strFilePath=fReturnFilePath("network.wri","C:")
(Note: Si FindFast n'est pas activé, la recherche prendra plus de temps)
Alternative: Pour Access 95 (également pour Access 97 ), vous pouvez utiliser la
fonction suivante comme substitution à l'objet FileSearch.
Private Declare Function apiSearchTreeForFile Lib "ImageHlp.dll" Alias _
"SearchTreeForFile" (ByVal lpRoot As String, ByVal lpInPath _
As String, ByVal lpOutPath As String) As Long
Function fSearchFile(ByVal strFilename As String, _
ByVal strSearchPath As String) As String
Dim lpBuffer As String
Dim lngResult As Long
fSearchFile = ""
lpBuffer = String$(1024, 0)
lngResult = apiSearchTreeForFile(strSearchPath, strFilename, lpBuffer)
If lngResult <> 0 Then
If InStr(lpBuffer, vbNullChar) > 0 Then
fSearchFile = Left$(lpBuffer, InStr(lpBuffer, vbNullChar) - 1)
End If
End If
End Function
|