UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_EnumFileStreams

Énumère tous les flux avec un type de flux ::$DATA dans le fichier ou le répertoire spécifié

#include <WinAPIFiles.au3>
_WinAPI_EnumFileStreams ( $sFilePath )

Paramètre

$sFilePath Le chemin d'accès au fichier ou au répertoire. Le fichier doit se trouver sur un volume avec le système de fichiers NTFS.

Valeur de retour

Succès: Retourne le tableau 2D des noms des flux et de leur taille.
[0][0] - Nombre de lignes du tableau (n)
[0][1] - Inutilisé
[n][0] - Nom du flux.
[n][1] - Taille du flux, en octets.
Échec: Définit @error <> 0, @extended contient le code d'erreur NTSTATUS.

Voir aussi

Consultez ZwQueryInformationFile dans la librairie MSDN.

Exemple

#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <WinAPIHObj.au3>
#include <WinAPIMem.au3>
#include <WinAPIMisc.au3>
#include <WinAPIShPath.au3>

Local Const $sFile = @TempDir & '\Test.txt'

; Vérifie le système de fichiers NTFS
If StringCompare(DriveGetFileSystem(_WinAPI_PathStripToRoot($sFile)), '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 $hFile, $pData, $sName, $iBytes
; Crée un fichier texte avec trois flux alternatifs nommés AS1, AS2, AS3
For $i = 0 To 3
    If $i > 0 Then
        $pData = _WinAPI_CreateString('Flux Alternatif ' & $i)
        $sName = ':AS' & $i
    Else
        $pData = _WinAPI_CreateString('Flux principal')
        $sName = ''
    EndIf
    $hFile = _WinAPI_CreateFile($sFile & $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
Local $aData = _WinAPI_EnumFileStreams($sFile)

_ArrayDisplay($aData, '_WinAPI_EnumFileStreams')

; Lit les données texte de chaque flux
$pData = _WinAPI_CreateBuffer(1024)
For $i = 1 To $aData[0][0]
    $hFile = _WinAPI_CreateFile($sFile & $aData[$i][0], 2, 2, 6)
    _WinAPI_ReadFile($hFile, $pData, $aData[$i][1], $iBytes)
    _WinAPI_CloseHandle($hFile)
    $aData[$i][1] = _WinAPI_GetString($pData)
Next
_WinAPI_FreeMemory($pData)

_ArrayDisplay($aData, '_WinAPI_EnumFileStreams')

FileDelete($sFile)