Recherche dans un répertoire des fichiers ou des sous-répertoires avec un nom qui satisfait à un critère
#include <WinAPIFiles.au3>
_WinAPI_FindFirstFile ( $sFilePath, $tData )
$sFilePath | Le répertoire ou le chemin, et le nom de fichier, ce qui peut inclure des caractères génériques, par exemple, un astérisque "*" ou un point d'interrogation "?". Si la chaîne se termine par le générique, point ".", ou le nom d'un répertoire, l'utilisateur doit disposer des autorisations d'accès à la racine et à tous les sous-répertoires du chemin. |
$tData | La structure $tagWIN32_FIND_DATA, ou un pointeur sur une telle structure, qui reçoit des informations sur le fichier ou le répertoire trouvé. |
Succès: | Retourne le handle de recherche. |
Échec: | Retourne 0 et définit @error <> 0, @extended peut contenir le code d'erreur du système. |
Cette fonction ouvre une handle de recherche et retourne des informations sur le premier fichier que le système de fichiers trouve avec un nom qui correspond au modèle spécifié.
Cela peut ou peut ne pas être le premier fichier ou répertoire qui apparaît dans une application qui liste le répertoire lorsqu'il a le même modèle de critères des noms de fichier.
Après que le handle de recherche ait été défini, vous pouvez l'utiliser pour rechercher d'autres fichiers qui correspondent au même modèle en utilisant la fonction _WinAPI_FindNextFile().
Si la fonction échoue, car aucun des fichiers ne correspond au modèle, le flag @extended contiendra le code d'erreur du système ERROR_FILE_NOT_FOUND (2).
Lorsque le handle de recherche n'est plus nécessaire, fermez-le à l'aide de la fonction _WinAPI_FindClose().
_WinAPI_FindClose, _WinAPI_FindNextFile
Consultez FindFirstFile dans la librairie MSDN.
#include <Array.au3> #include <MsgBoxConstants.au3> #include <WinAPIConv.au3> #include <WinAPIError.au3> #include <WinAPIFiles.au3> Local $aList[101][2] = [[0]] Local $tData = DllStructCreate($tagWIN32_FIND_DATA) Local $sFile Local $hSearch = _WinAPI_FindFirstFile(@ScriptDir & '\*', $tData) While @error = 0 $sFile = DllStructGetData($tData, 'cFileName') Switch $sFile Case '.', '..' Case Else If Not BitAND(DllStructGetData($tData, 'dwFileAttributes'), $FILE_ATTRIBUTE_DIRECTORY) Then $aList[0][0] += 1 If $aList[0][0] > UBound($aList) - 1 Then ReDim $aList[UBound($aList) + 100][2] EndIf $aList[$aList[0][0]][0] = $sFile $aList[$aList[0][0]][1] = _WinAPI_MakeQWord(DllStructGetData($tData, 'nFileSizeLow'), DllStructGetData($tData, 'nFileSizeHigh')) EndIf EndSwitch _WinAPI_FindNextFile($hSearch, $tData) WEnd Switch @extended Case 18 ; ERROR_NO_MORE_FILES Case Else MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), @extended, _WinAPI_GetErrorMessage(@extended)) Exit EndSwitch _WinAPI_FindClose($hSearch) _ArrayDisplay($aList, '_WinAPI_Find...', $aList[0][0])