2009-07-17 3 views
0

J'utilise l'implémentation this de ReadDirectoryChangesW pour surveiller les modifications apportées au bureau. Mon programme prévoit d'exécuter un petit programme lorsqu'un fichier est créé sur le bureau. Maintenant, le problème que je rencontre est lorsque je crée un nouveau raccourci via le menu contextuel clic droit ReadDirectoryChangesW reçoit une notification disant que le fichier a été créé, mais juste après avoir reçu une autre notification disant que le fichier a été supprimé. J'ai été confronté à ce problème depuis Windows Vista.ReadDirectoryChangesW pense que le raccourci est en cours de suppression juste après la création

Quelqu'un at-il une idée de ce qui pourrait se passer? Y at-il une autre fonction que je devrais utiliser pour surveiller les changements de répertoire spécifiques à Vista et 7?

Merci, Krishna

+0

quel nom de fichier est-il ajouté et lequel a été supprimé? –

+0

Il est dit "New Shortcut.lnk" a été ajouté, puis après le traitement de cette notification, je reçois un message disant New Shortcut.lnk a été retiré –

+0

Pourquoi est-ce un problème? Les notifications sont-elles inexactes? –

Répondre

0

J'ai réussi à résoudre ce problème. Je ne sais toujours pas pourquoi je reçois tous ces étranges événements ReadDirectyChangesW mais j'ai obtenu mon résultat final, donc je laisse cette question être.

Merci pour toute l'aide.

0

Avez-vous défini des filtres: vous pouvez voir des le raccourci recréée (et ne correspond pas à votre filtre).

Explorer a tendance à créer des objets avec un nom fixe, puis à les renommer. Donc, ReadDirectoryChangesW verra plusieurs changements.

pensées supplémentaires:

note, le tampon avec la notification de changement peut contenir plusieurs notifications, sont tous lus.

Que voit Process Monitor en même temps?

+0

Désolé, je suppose que j'étais un peu flou. Je vois le raccourci être créé, mais après avoir reçu une notification sur le raccourci étant créé, il est immédiatement suivi d'une notification que le fichier a été supprimé, ce qui n'a pas de sens. Cette implémentation semble utiliser GetQueuedCompletionStatus pour obtenir l'instruction IO qui s'est produite, puis me renvoyer un pointeur vers un objet qui me dira quels filtres appliquer pour l'appel ReadDirectoryChangesW –

+0

J'ai développé cela. Mais à la fin, il n'y a pas de substitut au débogage classique. Il est très facile d'utiliser des API comme 'ReadDirectoruChnagesW' mal et des erreurs. Ne présumez pas que le code du projet de code est correct. – Richard

0

Windows fait des choses amusantes avec des fichiers .lnk de sorte que vous ne pouvez pas voir l'extension .lnk. C'est peut-être la raison pour laquelle la notification supprimée est envoyée, car Windows lui-même ne peut pas voir le fichier "New Shortcut.lnk", seulement le "Nouveau raccourci". Mais ce n'est qu'une théorie.

Donc ce que je ferais est d'essayer de contourner le problème et d'ignorer la notification de suppression de fichier si le fichier existe encore. En supposant que vous pouvez comprendre que le fichier .lnk existe toujours bien sûr :)

Questions connexes