Je suis en train de suivre un répertoire e:\test
en utilisant l'API ReadDirectoryChangesW.répertoire de surveillance en utilisant l'API ReadDirectoryChangesW
Mon code:
#define UNICODE
#define WIN32_WINNT 0x0500
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
HANDLE hDir;
int _tmain(int argc, _TCHAR* argv[])
{
FILE_NOTIFY_INFORMATION fniDir;
DWORD i = 0;
hDir = CreateFile(_T("e:\\test"), GENERIC_READ , FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
ReadDirectoryChangesW(hDir, &fniDir, sizeof(fniDir), TRUE, FILE_NOTIFY_CHANGE_FILE_NAME, &i, NULL, NULL);
while(TRUE)
{
if(i>0)
wprintf(L"%s", fniDir.FileName);
}
CloseHandle(hDir);
return 0;
}
Je ne sais pas quel est le problème avec mon code comme je l'ai pas compris la documentation ReadDirectoryChangesW complètement, spécialement les paramètres LPOVERLAPPED
.
Quand je lance le code que je ne reçois pas de sortie, à l'exception d'une fenêtre de la console vide. Quelqu'un peut-il me diriger dans une bonne direction?
Merci.
+1 Merci pour votre réponse. J'ai quelques questions Pourquoi devons-nous créer une matrice de 'FILE_NOTIFY_INFORMATION' et ce qui est' NextEntryOffset'-t-il dire qu'il contient le nombre d'octets pour aller enregistrement suivant dans le tableau? – Searock
@Searock Une notification peut contenir plus d'un fichier modifié dans ce répertoire. Vous ne recevez pas une notification par changement mais des lots. Le tampon y est parce que FILE_NOTIFIY_INFORMATION utilise définit le nom de fichier comme wchar un « tour » [1] (http://msdn.microsoft.com/en-us/library/aa364391%28v=vs.85%29.aspx) et alors vous êtes responsable de le régler à une taille correspondant au nombre de fichiers dont vous avez besoin. – RedX
Le code d'itération du tampon est incorrect. Chaque membre de structure FILE_NOTIFY_INFORMATION est de longueur variable, donc vous ne pouvez pas simplement indexer dans le tableau. Vous devez calculer la distance à l'entrée suivante à chaque fois. En outre, wprintf est incorrect. FileName n'est pas terminé par null. –