Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

notification de changement dans un repertoire

14 réponses
Avatar
Vincent Torri
Je desire connaitre tous les changements qui ont lieu dans un repertoire.
Pour cela, j'utilise la fonction ReadDirectoryChangesW(). J'ai ecrit un
programme de test, qui fonctionne (j'obtiens bien une notification quand
une fichier ou repertoire est supprime, quand il est modifie, etc...),
mais il me manque une fonctionalite : distinguer, lors de l'ajout ou la
suppression d'un fichier ou d'un repertoire, si c'est un fichier ou bien
si c'est un repertoire. En effet, a priori, dans la structure
FILE_NOTIFY_INFORMATION, je n'ai que l'information de suppression ou
d'ajout, sans savoir s'il s'agit d'un fichier ou d'un repertoire.

Le programme de test se trouve ici : http://pastebin.ca/1483658

Une possibilite serait de lister les fichiers avant et apres et de voir
la difference a chaque notification, mais ca me semble etre une solution
qui peut s'averer couteuse si le nombre de fichier est grand.

Existe-t-il une autre solution, basee sur l'utilisation de
ReadDirectoryChangesW() ?

merci

4 réponses

1 2
Avatar
Vincent Torri
domi écrivait news:h2nh23$mbk$:

Vincent Torri wrote:
Christian ASTOR écrivait
news:4a4f28a8$0$296 $:

Vincent Torri wrote:

certes, dans le cas de l'addition vu que j'ai acces au nom de
fichier. Mais dans le cas de la suppression ?


On a aussi accès au nom du fichier...



et ? Qu'est-ce que j'en fais dans la meesure ou le fichier (ou le
repertoire) a ete efface... ? J'ai beau avoir le nom, a part avoir
une copie de la liste des fichiers, a priori, je ne peux rien en
faire.



Tu disais :

"il me manque une fonctionalite : distinguer, lors de l'ajout ou la
suppression d'un fichier ou d'un repertoire, si c'est un fichier ou
bien si c'est un repertoire"

donc avec GetFileAttributes comme a dit Robert tu as bien
l'information.




pas lors de la suppression. Suppose que je fasse le monitoring d'un
repertoire. Via une autre application, un fichier est supprime. Le
programme qui fait le monitoring detecte une suppression. Si j'utilise
GetFileAttribute avec le nom que je peux en effet recuperer, ca me
renverra une erreur (forcement, le fichier n'existant plus).
Avatar
Vincent Torri
domi écrivait news:h2nmh8$tmj$:

Vincent Torri wrote:
domi écrivait news:h2nh23$mbk$:
donc avec GetFileAttributes comme a dit Robert tu as bien
l'information.




pas lors de la suppression. Suppose que je fasse le monitoring d'un
repertoire. Via une autre application, un fichier est supprime. Le
programme qui fait le monitoring detecte une suppression. Si j'utilise
GetFileAttribute avec le nom que je peux en effet recuperer, ca me
renverra une erreur (forcement, le fichier n'existant plus).



Oui, mais comme il a dit : tu initialises ta liste ou tableau avec les
fichiers/répertoires du répertoire au tout début 1 seule fois, que tu
mets à jour en cas de suppression ou ajout de fichier ou répertoire.




ce que je trouve effarant, c'est que l'api de windows ne puisse pas
fournir ce genre de renseignement simple. D'un cote, on demande la
notification d'un repertoire ou (inclusif) d'un fichier (et on fait bien
la distinction entre les 2), et de l'autre, on ne peut pas savoir lequel
a ete supprime.

apres plusieurs recherches avec google, je ne suis pas le seul a avoir
ete confronte a ce probleme.
Avatar
robert
Vincent Torri a écrit :
domi écrivait news:h2nmh8$tmj$:

Vincent Torri wrote:
domi écrivait news:h2nh23$mbk$:
donc avec GetFileAttributes comme a dit Robert tu as bien
l'information.



pas lors de la suppression. Suppose que je fasse le monitoring d'un
repertoire. Via une autre application, un fichier est supprime. Le
programme qui fait le monitoring detecte une suppression. Si j'utilise
GetFileAttribute avec le nom que je peux en effet recuperer, ca me
renverra une erreur (forcement, le fichier n'existant plus).


Oui, mais comme il a dit : tu initialises ta liste ou tableau avec les
fichiers/répertoires du répertoire au tout début 1 seule fois, que tu
mets à jour en cas de suppression ou ajout de fichier ou répertoire.




ce que je trouve effarant, c'est que l'api de windows ne puisse pas
fournir ce genre de renseignement simple. D'un cote, on demande la
notification d'un repertoire ou (inclusif) d'un fichier (et on fait bien
la distinction entre les 2), et de l'autre, on ne peut pas savoir lequel
a ete supprime.

apres plusieurs recherches avec google, je ne suis pas le seul a avoir
ete confronte a ce probleme.


C'est clair quand je vois ca j'ai parfois envie de tout foutre en l'air!
Mais je suppose qu'on n'a pas le choix...
Avatar
Vincent Torri
Christian ASTOR écrivait
news:4a4f9392$0$292$:

Vincent Torri wrote:

ce que je trouve effarant, c'est que l'api de windows ne puisse pas
fournir ce genre de renseignement simple. D'un cote, on demande la
notification d'un repertoire ou (inclusif) d'un fichier (et on fait
bien la distinction entre les 2), et de l'autre, on ne peut pas
savoir lequel a ete supprime.



Tu peux créer 2 threads, 1 pour les notifications de fichiers
(FILE_NOTIFY_CHANGE_FILE_NAME), l'autre pour les répertoires
(FILE_NOTIFY_CHANGE_DIR_NAME)..



Ca serait peut-etre possible. Je porte une lib linux sous Windows, donc
je n'ai pas trop de marge de manoeuvre. En tout cas, j'ai 2 angles
d'attaque, maintenant.

merci a tous
1 2