UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_FindFirstFile

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 )

Paramètres

$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é.

Valeur de retour

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.

Remarques

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().

En relation

_WinAPI_FindClose, _WinAPI_FindNextFile

Voir aussi

Consultez FindFirstFile dans la librairie MSDN.

Exemple

#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])