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] )
$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). |
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. |
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.
Consultez ReadDirectoryChangesW dans la librairie MSDN.
#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