Notification de modification de contenu de répertoire
4 réponses
Philippe GREMILLET
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses
pertinentes dans le passé...
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un
nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir
une notification de modification du contenu de ce répertoire (du genre : "un
nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le
nouveau fichier image, effectue les traitement appropriés, et affiche le
résultat dans une fenêtre qui lui est propre.
J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire
("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système.
J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble
appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
: ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible...
Merci de me dire si cette approche est la bonne et, si oui, quelles sont les
étapes à effectuer et, si non, par quel bout attaquer la chose !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
No_Name
Philippe GREMILLET avait écrit le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses pertinentes dans le passé... J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le nouveau fichier image, effectue les traitement appropriés, et affiche le résultat dans une fenêtre qui lui est propre. J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système. J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible... Merci de me dire si cette approche est la bonne et, si oui, quelles sont les étapes à effectuer et, si non, par quel bout attaquer la chose !
Cordialement,
Philippe Gremillet, développeur indépendant
Il me semble qu'un Timer battant la seconde (par exemple) pourrait vous permettre d'effectuer cette vérification régulièrement sans surcharger le système. A condition bien entendu que la vérification en question dure moins d'une seconde ... et cela dépend du nombre de fichiers présents dans le dossier en question.
Philippe GREMILLET avait écrit le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses
pertinentes dans le passé...
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un
nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir
une notification de modification du contenu de ce répertoire (du genre : "un
nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le
nouveau fichier image, effectue les traitement appropriés, et affiche le
résultat dans une fenêtre qui lui est propre.
J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire
("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système.
J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble
appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible...
Merci de me dire si cette approche est la bonne et, si oui, quelles sont les
étapes à effectuer et, si non, par quel bout attaquer la chose !
Cordialement,
Philippe Gremillet, développeur indépendant
Il me semble qu'un Timer battant la seconde (par exemple) pourrait vous
permettre d'effectuer cette vérification régulièrement sans surcharger
le système. A condition bien entendu que la vérification en question
dure moins d'une seconde ... et cela dépend du nombre de fichiers
présents dans le dossier en question.
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses pertinentes dans le passé... J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le nouveau fichier image, effectue les traitement appropriés, et affiche le résultat dans une fenêtre qui lui est propre. J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système. J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible... Merci de me dire si cette approche est la bonne et, si oui, quelles sont les étapes à effectuer et, si non, par quel bout attaquer la chose !
Cordialement,
Philippe Gremillet, développeur indépendant
Il me semble qu'un Timer battant la seconde (par exemple) pourrait vous permettre d'effectuer cette vérification régulièrement sans surcharger le système. A condition bien entendu que la vérification en question dure moins d'une seconde ... et cela dépend du nombre de fichiers présents dans le dossier en question.
No_Name
Philippe GREMILLET a exposé le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses pertinentes dans le passé... J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le nouveau fichier image, effectue les traitement appropriés, et affiche le résultat dans une fenêtre qui lui est propre. J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système. J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible... Merci de me dire si cette approche est la bonne et, si oui, quelles sont les étapes à effectuer et, si non, par quel bout attaquer la chose !
ReadDirectoryChangesW(.), s'utilise uniquement avec les OS de type NT, mais est beaucoup plus simple d'utilisation puisqu'elle permet d'obtenir tous les renseignements souhaités sur le dossier/fichier modifié.
La fonction ReadDirectoryChangesW(.) permet de préciser un filtre dans son prototype intervenant sur le type de changement auxquels la fonction est 'sensible' => pout toi FILE_NOTIFY_CHANGE_SIZE.
Le principe est de créer un thread de polling de ton fichier ou répertoire (il scrute en permanence d'éventuelles modifications (while... ReadDirectoryChangesW ), et lorsqu'une modification a lieu tu pourras alors :
* Soit réagir directement dans le thread de polling, * soit lever un event pour que le process principal traite l'info.
Philippe GREMILLET a exposé le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses
pertinentes dans le passé...
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un
nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir
une notification de modification du contenu de ce répertoire (du genre : "un
nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le
nouveau fichier image, effectue les traitement appropriés, et affiche le
résultat dans une fenêtre qui lui est propre.
J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire
("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système.
J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble
appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible...
Merci de me dire si cette approche est la bonne et, si oui, quelles sont les
étapes à effectuer et, si non, par quel bout attaquer la chose !
ReadDirectoryChangesW(.), s'utilise uniquement avec les OS de type
NT, mais est beaucoup plus simple d'utilisation puisqu'elle permet
d'obtenir tous les renseignements souhaités sur le dossier/fichier
modifié.
La fonction ReadDirectoryChangesW(.) permet de préciser un filtre dans
son prototype intervenant sur le type de changement auxquels la
fonction est 'sensible' => pout toi FILE_NOTIFY_CHANGE_SIZE.
Le principe est de créer un thread de polling de ton fichier ou
répertoire (il scrute en permanence d'éventuelles modifications
(while... ReadDirectoryChangesW ), et lorsqu'une modification a lieu tu
pourras alors :
* Soit réagir directement dans le thread de polling,
* soit lever un event pour que le process principal traite l'info.
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses pertinentes dans le passé... J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le nouveau fichier image, effectue les traitement appropriés, et affiche le résultat dans une fenêtre qui lui est propre. J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système. J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible... Merci de me dire si cette approche est la bonne et, si oui, quelles sont les étapes à effectuer et, si non, par quel bout attaquer la chose !
ReadDirectoryChangesW(.), s'utilise uniquement avec les OS de type NT, mais est beaucoup plus simple d'utilisation puisqu'elle permet d'obtenir tous les renseignements souhaités sur le dossier/fichier modifié.
La fonction ReadDirectoryChangesW(.) permet de préciser un filtre dans son prototype intervenant sur le type de changement auxquels la fonction est 'sensible' => pout toi FILE_NOTIFY_CHANGE_SIZE.
Le principe est de créer un thread de polling de ton fichier ou répertoire (il scrute en permanence d'éventuelles modifications (while... ReadDirectoryChangesW ), et lorsqu'une modification a lieu tu pourras alors :
* Soit réagir directement dans le thread de polling, * soit lever un event pour que le process principal traite l'info.
Philippe GREMILLET
"No_Name" a écrit dans le message de news: gm6dgt$dhh$
Philippe GREMILLET a exposé le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses pertinentes dans le passé... J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le nouveau fichier image, effectue les traitement appropriés, et affiche le résultat dans une fenêtre qui lui est propre. J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système. J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible... Merci de me dire si cette approche est la bonne et, si oui, quelles sont les étapes à effectuer et, si non, par quel bout attaquer la chose !
ReadDirectoryChangesW(.), s'utilise uniquement avec les OS de type NT, mais est beaucoup plus simple d'utilisation puisqu'elle permet d'obtenir tous les renseignements souhaités sur le dossier/fichier modifié.
La fonction ReadDirectoryChangesW(.) permet de préciser un filtre dans son prototype intervenant sur le type de changement auxquels la fonction est 'sensible' => pout toi FILE_NOTIFY_CHANGE_SIZE.
Le principe est de créer un thread de polling de ton fichier ou répertoire (il scrute en permanence d'éventuelles modifications (while... ReadDirectoryChangesW ), et lorsqu'une modification a lieu tu pourras alors :
* Soit réagir directement dans le thread de polling, * soit lever un event pour que le process principal traite l'info.
Merci beaucoup pour vos précieuses infos !
En outre, depuis l'entrée "ReadDirectoryChangesW" du SDK, j'ai accédé à l'entrée "FindFirstChangeNotification", laquelle contient un exemple qui me paraît être une excellente base...
Cordialement,
PhGrt
"No_Name" <no_mail@no_mail.com> a écrit dans le message de news:
gm6dgt$dhh$1@aioe.org...
Philippe GREMILLET a exposé le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses
pertinentes dans le passé...
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout
d'un nouveau fichier image dans un répertoire dont le nom m'est connu,
recevoir une notification de modification du contenu de ce répertoire (du
genre : "un nouveau fichier a été ajouté"), afin que mon appli charge
automatiquement le nouveau fichier image, effectue les traitement
appropriés, et affiche le résultat dans une fenêtre qui lui est propre.
J'ai dans l'idée qu'effectuer un polling régulier du contenu du
répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement
le système.
J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui
semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu
hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible...
Merci de me dire si cette approche est la bonne et, si oui, quelles sont
les étapes à effectuer et, si non, par quel bout attaquer la chose !
ReadDirectoryChangesW(.), s'utilise uniquement avec les OS de type NT,
mais est beaucoup plus simple d'utilisation puisqu'elle permet d'obtenir
tous les renseignements souhaités sur le dossier/fichier modifié.
La fonction ReadDirectoryChangesW(.) permet de préciser un filtre dans son
prototype intervenant sur le type de changement auxquels la fonction est
'sensible' => pout toi FILE_NOTIFY_CHANGE_SIZE.
Le principe est de créer un thread de polling de ton fichier ou répertoire
(il scrute en permanence d'éventuelles modifications (while...
ReadDirectoryChangesW ), et lorsqu'une modification a lieu tu pourras
alors :
* Soit réagir directement dans le thread de polling,
* soit lever un event pour que le process principal traite l'info.
Merci beaucoup pour vos précieuses infos !
En outre, depuis l'entrée "ReadDirectoryChangesW" du SDK, j'ai accédé à
l'entrée "FindFirstChangeNotification", laquelle contient un exemple qui me
paraît être une excellente base...
"No_Name" a écrit dans le message de news: gm6dgt$dhh$
Philippe GREMILLET a exposé le 2/2/2009 :
Bonjour à tous !
Tout d'abord, veuillez m'excuser si ma demande a déjà reçu mille réponses pertinentes dans le passé... J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajout d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recevoir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiquement le nouveau fichier image, effectue les traitement appropriés, et affiche le résultat dans une fenêtre qui lui est propre. J'ai dans l'idée qu'effectuer un polling régulier du contenu du répertoire ("FindFirstFile"...) n'est pas efficace, et surcharge bêtement le système. J'ai vu dans le SDK Win32 la fonction "SHChangeNotifyRegister", qui semble appropriée à vue de nez, mais dont l'utilisation me paraît un peu hasardeuse
ja ne saisi guère (entre autres !) comment remplir le contenu de
l'ITEMIDLIST décrivant le répertoire cible... Merci de me dire si cette approche est la bonne et, si oui, quelles sont les étapes à effectuer et, si non, par quel bout attaquer la chose !
ReadDirectoryChangesW(.), s'utilise uniquement avec les OS de type NT, mais est beaucoup plus simple d'utilisation puisqu'elle permet d'obtenir tous les renseignements souhaités sur le dossier/fichier modifié.
La fonction ReadDirectoryChangesW(.) permet de préciser un filtre dans son prototype intervenant sur le type de changement auxquels la fonction est 'sensible' => pout toi FILE_NOTIFY_CHANGE_SIZE.
Le principe est de créer un thread de polling de ton fichier ou répertoire (il scrute en permanence d'éventuelles modifications (while... ReadDirectoryChangesW ), et lorsqu'une modification a lieu tu pourras alors :
* Soit réagir directement dans le thread de polling, * soit lever un event pour que le process principal traite l'info.
Merci beaucoup pour vos précieuses infos !
En outre, depuis l'entrée "ReadDirectoryChangesW" du SDK, j'ai accédé à l'entrée "FindFirstChangeNotification", laquelle contient un exemple qui me paraît être une excellente base...
Cordialement,
PhGrt
Christian ASTOR
On 2 fév, 09:59, "Philippe GREMILLET" wrote:
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajou t d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recev oir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiq uement le nouveau fichier image, effectue les traitement appropriés, et affiche l e résultat dans une fenêtre qui lui est propre.
Voir le très vieil exemple classique FWATCH.C de MSDN pour ReadDirectoryChangesW() (modifier flags FILE_NOTIFY_CHANGE_LAST_WRITE if( fni->Action == FILE_ACTION_MODIFIED) et CheckChangedFile() pour ton cas.
On 2 fév, 09:59, "Philippe GREMILLET" <philippe.gremil...@eclisse.fr>
wrote:
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajou t d'un
nouveau fichier image dans un répertoire dont le nom m'est connu, recev oir
une notification de modification du contenu de ce répertoire (du genre : "un
nouveau fichier a été ajouté"), afin que mon appli charge automatiq uement le
nouveau fichier image, effectue les traitement appropriés, et affiche l e
résultat dans une fenêtre qui lui est propre.
Voir le très vieil exemple classique FWATCH.C de MSDN pour
ReadDirectoryChangesW()
(modifier flags FILE_NOTIFY_CHANGE_LAST_WRITE
if( fni->Action == FILE_ACTION_MODIFIED)
et
CheckChangedFile()
pour ton cas.
J'écris une appli Win32 en C/C++ dans laquelle j'aimerais, dès l'ajou t d'un nouveau fichier image dans un répertoire dont le nom m'est connu, recev oir une notification de modification du contenu de ce répertoire (du genre : "un nouveau fichier a été ajouté"), afin que mon appli charge automatiq uement le nouveau fichier image, effectue les traitement appropriés, et affiche l e résultat dans une fenêtre qui lui est propre.
Voir le très vieil exemple classique FWATCH.C de MSDN pour ReadDirectoryChangesW() (modifier flags FILE_NOTIFY_CHANGE_LAST_WRITE if( fni->Action == FILE_ACTION_MODIFIED) et CheckChangedFile() pour ton cas.