Énumère le premier flux avec un type de flux ::$DATA dans le fichier ou le répertoire spécifié
#include <WinAPIFiles.au3>
_WinAPI_FindFirstStream ( $sFilePath, $tData )
$sFilePath | Le nom du fichier complet. |
$tData | Une structure $tagWIN32_FIND_STREAM_DATA, ou un pointeur sur une telle structure, qui reçoit des informations sur le flux. |
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 le handle de recherche et retourne des informations sur le premier flux dans le fichier ou le répertoire spécifié.
Pour les fichiers, le premier flux est toujours le flux de données par défaut, "::$DATA".
Après la mise en place du handle de recherche, vous pouvez l'utiliser dans la fonction _WinAPI_FindNextStream() pour rechercher d'autres flux dans le fichier ou le répertoire spécifié.
Si la fonction échoue car aucun flux ne peut être trouvé, @extended contiendra le code d'erreur système ERROR_HANDLE_EOF (38).
Lorsque le handle de la recherche n'est plus utile, il doit être fermé à l'aide de la fonction _WinAPI_FindClose().
Cette fonction nécessite Windows Vista ou une version ultérieure.
_WinAPI_FindClose, _WinAPI_FindNextStream
Consultez FindFirstStreamW dans la librairie MSDN.
#include <MsgBoxConstants.au3> #include <WinAPIError.au3> #include <WinAPIFiles.au3> #include <WinAPIHObj.au3> #include <WinAPIMem.au3> #include <WinAPIMisc.au3> #include <WinAPIShPath.au3> Local Const $sTempFile = @TempDir & '\Test.txt' ; Vérifie le système de fichiers NTFS If StringCompare(DriveGetFileSystem(_WinAPI_PathStripToRoot($sTempFile)), 'NTFS') Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Le fichier doit se trouver sur un volume avec un système de fichier NTFS.') Exit EndIf Local $sName, $iBytes, $pData, $hFile ; Crée un fichier texte avec trois flux alternatifs nommés AS1, AS2, AS3 For $i = 0 To 3 If $i Then $pData = _WinAPI_CreateString('Flux Alternatif ' & $i) $sName = ':AS' & $i Else $pData = _WinAPI_CreateString('Flux principal') $sName = '' EndIf $hFile = _WinAPI_CreateFile($sTempFile & $sName, 1, 4) _WinAPI_WriteFile($hFile, $pData, _WinAPI_GetMemorySize($pData) - 2, $iBytes) _WinAPI_CloseHandle($hFile) _WinAPI_FreeMemory($pData) Next ; Énumére tous les flux existants dans le fichier et lit les données texte de chaque flux $pData = _WinAPI_CreateBuffer(1024) Local $tFSD = DllStructCreate($tagWIN32_FIND_STREAM_DATA) Local $hSearch = _WinAPI_FindFirstStream($sTempFile, $tFSD) Local $iSize While @error = 0 $sName = DllStructGetData($tFSD, 'StreamName') $iSize = DllStructGetData($tFSD, 'StreamSize') $hFile = _WinAPI_CreateFile($sTempFile & $sName, 2, 2, 6) _WinAPI_ReadFile($hFile, $pData, $iSize, $iBytes) _WinAPI_CloseHandle($hFile) ConsoleWrite(StringFormat('%10s (%s bytes) - %s', $sName, $iSize, _WinAPI_GetString($pData)) & @CRLF) _WinAPI_FindNextStream($hSearch, $tFSD) WEnd Switch @extended Case 38 ; ERROR_HANDLE_EOF Case Else MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), @extended, _WinAPI_GetErrorMessage(@extended)) EndSwitch _WinAPI_FindClose($hSearch) _WinAPI_FreeMemory($pData) FileDelete($sTempFile)