UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_ReadDirectoryChanges

Obtient des informations qui d�crivent les changements dans un r�pertoire sp�cifi�

#include <WinAPIFiles.au3>
_WinAPI_ReadDirectoryChanges ( $hDirectory, $iFilter, $pBuffer, $iLength [, $bSubtree = 0] )

Param�tres

$hDirectory Le handle du r�pertoire � surveiller. Ce r�pertoire doit �tre ouvert avec le droit d'acc�s $FILE_LIST_DIRECTORY.
$iFilter Les crit�res de filtrage que la fonction teste pour d�terminer si l'op�ration d'attente est termin�e.
Ce param�tre peut prendre une ou plusieurs des valeurs suivantes:
$FILE_NOTIFY_CHANGE_FILE_NAME
$FILE_NOTIFY_CHANGE_DIR_NAME
$FILE_NOTIFY_CHANGE_ATTRIBUTES
$FILE_NOTIFY_CHANGE_SIZE
$FILE_NOTIFY_CHANGE_LAST_WRITE
$FILE_NOTIFY_CHANGE_LAST_ACCESS
$FILE_NOTIFY_CHANGE_CREATION
$FILE_NOTIFY_CHANGE_SECURITY
$pBuffer Un pointeur vers le tampon format� align� sur un DWORD qui est utilis� en interne par cette fonction pour r�cup�rer les donn�es.
Pour cr�er un tampon, vous pouvez utiliser la fonction _WinAPI_CreateBuffer().
Pour �viter le crash du script, utiliser un tampon d'au moins 64 Ko.
Si la m�moire tampon est sup�rieure � 64 Ko et que l'application surveille un r�pertoire sur un r�seau, la fonction �choue.
Ceci est d� � une limitation de la taille de paquet avec les protocoles de partage de fichiers sous-jacents.
$iLength La taille de la m�moire tampon, en octets.
$bSubtree [optionnel] Sp�cifie si la fonction doit surveiller les sous-r�pertoires du r�pertoire sp�cifi�, les valeurs valides sont:
True - Surveille l'arborescence des r�pertoires don la racine est sp�cifi�.
False - Surveille seulement le dossier sp�cifi� (par d�faut).

Valeur de retour

Succ�s: Retourne le tableau 2D contenant les informations suivantes :
[0][0] - Nombre de lignes dans le tableau (n)
[0][1] - Inutilis�
[n][0] - Le nom de fichier relatif au handle du r�pertoire.
[n][1] - Le type de changement qui a eu lieu (l'une des constantes $FILE_ACTION_*).
�chec: D�finit @error <> 0, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur.

Remarques

Lorsque vous appelez la premi�re fois la fonction _WinAPI_ReadDirectoryChanges(), le syst�me alloue un tampon pour stocker les informations de changement.
Ce tampon est associ� au handle du r�pertoire jusqu'� ce qu'il soit ferm� et sa taille ne change pas pendant sa dur�e de vie.
Les modifications du r�pertoire qui se produisent entre les appels � cette fonction sont ajout�s au tampon et sont ensuite retourn�es � l'appel suivant.
S'il y a d�passement de tampon, tout le contenu est rejet�.

Pour obtenir le handle du r�pertoire, utilisez la fonction _WinAPI_CreateFileEx() avec le flag $FILE_FLAG_BACKUP_SEMANTICS.

La fonction _WinAPI_ReadDirectoryChanges() travaille uniquement en mode synchrone.

En relation

_WinAPI_CreateFileEx

Voir aussi

Consultez ReadDirectoryChangesW dans la librairie MSDN.

Exemple

#include <APIFilesConstants.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
#include <WinAPIFiles.au3>
#include <WinAPIMem.au3>

Global $g_sPath = @TempDir & '\~TEST~'

DirCreate($g_sPath)
If Not FileExists($g_sPath) Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Impossible de cr�er le r�pertoire.')
    Exit
EndIf

OnAutoItExitRegister('OnAutoItExit')

Local $hDirectory = _WinAPI_CreateFileEx($g_sPath, $OPEN_EXISTING, $FILE_LIST_DIRECTORY, BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_BACKUP_SEMANTICS)
If @error Then
    _WinAPI_ShowLastError('', 1)
EndIf

Local $pBuffer = _WinAPI_CreateBuffer(8388608)

Local $aData
While 1
    ; La ligne suivante bloque le script jusqu'� un changement dans le dossier surveill�
    $aData = _WinAPI_ReadDirectoryChanges($hDirectory, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME), $pBuffer, 8388608, 1)
    If @error = 0 Then
        _ArrayDisplay($aData, '_WinAPI_ReadDirectoryChanges')
    Else
        _WinAPI_ShowLastError('', 1)
    EndIf
WEnd

Func OnAutoItExit()
    DirRemove($g_sPath, 1)
EndFunc   ;==>OnAutoItExit