bonjour,
voila mon probleme : j'ai une classe qui permet de reperer les changement dans un dossier (ajout / modif /suppression)
poutr cela je lance un thread qui fait un "CreateFile" sur le dossier qui doit etre surveiller puis j'utilise le handle qu'il me retourne dans la fonction "ReadDirectoryChangesW" . Une fois que le thread tourne je vais ds mon dossier debuit explorer :
l'ajout et la suppression de dossier, fichier marche impec (les infos sont bien remonter) mais le renomage d'un dossier fils au dossier sur lequel j'ai fait un create file est impossible (j'ai le msg window "cette ressource est utiliser par un autre appli ...")
par contre j peu renomer les sous dossier sans prob.
Un ex pour etre plus clair. Si je fait le create file sur c:\ il sera impossible de renomer tous les sous dossier de c (par ex Windows, program file...) par contre je pourait renomer un sous dossier de window ou program file sans prob
voila j'espere avoir eté un minimum clair, si qq'un a une idéé en tous cas voila le code du thread
//créé le handle du dossier a surveillerHANDLE hDir = CreateFile( pThis->m_strPathToWatch,
FILE_LIST_DIRECTORY, /* access (read-write)mode */
FILE_SHARE_READ|FILE_SHARE_DELETE,
/* share mode */NULL,
/* security descriptor */OPEN_EXISTING,
/* how to create */FILE_FLAG_BACKUP_SEMANTICS,
/* file attributes */NULL
/* file with attributes tocopy */
);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
//Pb si on arrete le thread pendant qu'il est bloquer sur ReadDirectoryChangesW//on est obliger de forcer le thread a ce terminer (pas tres propre)while (!pThis->m_bStop){
//Attent les changementsif( ReadDirectoryChangesW( hDir, /* handle to directory */&Buffer,
/* read results buffer */sizeof(Buffer), /* length of buffer */TRUE,
/* monitoring option *//*FILE_NOTIFY_CHANGE_SECURITY|*/FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_ACCESS|
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
/* filter conditions */&BytesReturned,
/* bytes returned */NULL,
/* overlapped buffer */NULL))
/* completion routine */{
//code de traitement
}
CloseHandle(hDir);