IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Capturer un évènement du système de fichier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 512
    Par défaut Capturer un évènement du système de fichier
    Bonjour
    j'ai besoin de contrôler depuis une application le fichier crée par une numérisation sur un scanner.
    L'idée est de ne pas obliger l'utilisateur à retrouver le fichier (par un explorateur intégré) qui vient d'être numérisé pour le sélectionner puis l'afficher dans l'application en vue du rattachement à une base de données.
    Pour cela j'imagine de capturer l'évènement windows (s'il existe) survenant lors de la création puis de la fermeture du dit fichier image.
    Malgré quelques recherches je ne trouve pas d'évènement de ce type. (tout comme le WM_DEVICECHANGE)
    Pourtant cela existe nécessairement puisque l'explorateur se met spontanément à jour quand un fichier est créé sur le disque.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 686
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    J'ai eu la même problématique pour une de mes applications. Je devais scruter un répertoire et lancer des traitements dès que des fichiers étaient déposés dans ce répertoire. Sans rentrer trop dans les détails (l'application est constituée de plusieurs modules et c'est un de ces modules (un service Windows) qui est chargé de scruter le répertoire), j'ai utilisé un TTimer. Ainsi, je peux régler la fréquence à laquelle on scrute le répertoire.

    Le principe que j'avais adopté est le suivant :
    A chaque scrutation, je vérifie s'il y a un fichier "flag". Si ce fichier existe cela signifie qu'un traitement est en cours donc je ne vais pas plus loin (on verra à la prochaine scrutation). Si le fichier flag est absent, alors je crée le fichier flag et je dresse la liste des fichiers présents et disponibles dans le répertoire. Par disponible, j'entends que le fichier soit accessible en mode "fmShareExclusive" (c'est à dire qu'il ne soit pas locké par une autre application : dans votre cas, ça serait par exemple de temps de scanner l'image). Ensuite, je déplace les fichiers listés dans un répertoire de travail et je lance un autre module qui réalise le traitement. A la fin dudit traitement, le fichier de flag est supprimé.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Pour surveiller un répertoire, il y a aussi des API.
    Regarde du côté de https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx et https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 940
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 940
    Par défaut
    En plus de ce que propose Lung, il y a aussi SHChangeNotifyRegister qui travaille lui par message (ShlObj.pas).

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 686
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    En plus de ce que propose Lung, il y a aussi SHChangeNotifyRegister qui travaille lui par message (ShlObj.pas).
    Dans ma solution, j'avais testé SHChangeNotifyRegister, mais cela me posait des problèmes. L'application est bien avertie lorsqu'un nouveau fichier apparait dans le répertoire mais les traitements que je lançais ensuite bloquaient. Je lançais une "ocrisation" des images or, l'ocr utilisé ne disposait que d'une seule licence. Les fichiers devaient donc être traités un par un. Avec SHChangeNotifyRegister, à chaque apparition de fichier dans le répertoire à scruter déclenchait le traitement d'ocirsation et en cas de conflit (une nouvelle ocrisation était demandée alors que la précédente n'était pas terminée) cela bloquait l'OCR et donc toute la chaine de traitement.

    La méthode avec le timer et un fichier de flag n'est peut être pas la plus "belle" mais elle permet d'être entièrement paramétrable et contrôlable simplement.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 940
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 940
    Par défaut
    Cela n'empêche pas d'empiler les fichiers pour les traiter un à un.

Discussions similaires

  1. Capture de l'évènement de sauvegarde de fichier
    Par DrSnake dans le forum ImageJ
    Réponses: 0
    Dernier message: 17/08/2010, 11h53
  2. Capture d'événement de création de fichier
    Par Verbalinsurection dans le forum C++
    Réponses: 11
    Dernier message: 04/10/2007, 18h12
  3. Réponses: 6
    Dernier message: 20/04/2006, 15h44
  4. Peut on manipuler le système de fichier par T-SQL?
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2003, 09h19
  5. Le système de fichiers utilisé ?
    Par KORTA dans le forum C
    Réponses: 2
    Dernier message: 17/09/2003, 21h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo