UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_FindNextStream

Obtient le flux suivant dans une recherche de flux

#include <WinAPIFiles.au3>
_WinAPI_FindNextStream ( $hSearch, $tData )

Paramètres

$hSearch Le handle de recherche retourné par un appel précédent à la fonction _WinAPI_FindFirstStream().
$tData Une structure $tagWIN32_FIND_STREAM_DATA, ou un pointeur sur une telle structure, qui reçoit des informations sur le flux trouvé.

Valeur de retour

Succès: Retourne True.
Échec: Retourne False et définit @error <> 0, @extended peut contenir le code d'erreur du système.

Remarques

Si la fonction échoue parce que plus aucun flux n'est trouvé, @extended contiendra le code d'erreur système ERROR_HANDLE_EOF (38).

Cette fonction nécessite Windows Vista ou une version ultérieure.

En relation

_WinAPI_FindFirstStream

Voir aussi

Consultez FindNextStreamW dans la librairie MSDN.

Exemple

#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, $pFSD)
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)