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

Windows Forms Discussion :

Notification de fermeture de fichier


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 18
    Par défaut Notification de fermeture de fichier
    Bonjour,

    J'aimerais savoir s'il est possible d'implémenter un système de notification quand une application ferme un fichier.

    Je m'explique ; je développe une application qui écoute les modifications appliquées à certains fichiers. Pour ce faire j'utilise un FileSystemWatcher. Dès qu'il repère une modification, la méthode OnChanged s'exécute. Celle-ci va tenter d'ouvrir le fichier pour en récupérer le FileStream.

    Evidemment, l'ouverture génère une IOException dans le cas où le fichier est déjà ouvert par une autre application et que celle-ci ne permet pas le FileShare.

    C'est le cas par exemple de Word qui, visiblement, garde le fichier ouvert jusqu'à ce qu'on le quitte. Le problème est donc le suivant : A chaque sauvegarde effectuée dans Word, le FileSystemWatcher exécute la méthode OnChanged mais celle-ci ne peut ouvrir le fichier car déjà utilisé par Word (IOException). Il faut donc attendre que Word ferme le fichier, c'est à dire que Word soit lui même fermé par l'utilisateur.

    Pour ce faire, il y a bien sûr la solution de faire une boucle sur un try catch de l'ouverture du fichier avec dans le catch un sleep d'un certain temps, mais cette solution n'est pas très propre. N'y a-t-il pas moyen de se mettre en attente sur le fichier et que celui-ci notifie mon application quand il est devenu accessible ? A ma connaissance non, mais je pose tout de même la question. Peux-être y a-t-il moyen de demander au système d'exploitation de surveiller un fichier et de prévenir une application quand celui-ci est fermé.

    Merci d'avance pour vos réponses =)

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    j'ai bien peur qu'en dehors de ta solution de faire du pooling sur la mise à disposition du fichier toutes les X secondes ou minutes, il n'y ait pas bcp
    d'autres possibilités

    The Monz, Toulouse

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu peux utiliser un FileSystemWatcher.
    En fait ça ne te préviens pas si un fichier est fermé, mais si il est modifié. C'est toujours un début...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 27
    Par défaut
    Salut,

    si les fichiers que tu veux observer sont forçément des fichiers word, tu peux utiliser un objet COM pour écouter les événèments utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Microsoft.Office.Interop.Word.Application app = .....;
                app.DocumentBeforeClose += new Microsoft.Office.Interop.Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(app_DocumentBeforeClose);
    Si tu veux que ça marche pour tout type de fichiers, là, à vrai dire je ne sais pas trop... le problème étant qu'à ma connaissance, c'est le processus ouvrant le fichier qui lui attribue des options de partage/d'accès etc, donc si tu ne connais pas l'application qui utilise le fichier, à moins d'une solution comme tu l'expliquais (boucles avec 'sleep'), je ne vois pas.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 18
    Par défaut
    Merci de vos réponses

    @tomlev : J'utilise déjà un FileSystemWatcher et comme tu dis ce qui m'intéresse c'est de savoir quand une application ferme un fichier et cela, le FileSystemWatcher ne le notifie pas.

    @Ferdydurke : L'utilisation des objets COM est effectivement une bonne idée mais je préfère quelque chose de générique qui fonctionne avec tout type de fichiers et tout type d'applications, pas seulement les applications Microsoft. J'ai pris Word comme exemple car c'est le seul que je connaisse qui garde le fichier ouvert durant son exécution mais je suppose qu'il doit y en avoir d'autres.

    Je pense donc que je vais devoir utiliser cette solution peu élégante qu'est le sleep sur une certaine durée si personne ne voit d'autres solutions

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il doit pourtant être possible d'intercepter toutes les actions faites sur des fichiers, y compris la fermetures. Filemon de Sysinternals le fait.
    Il faudrait chercher dans les fonctions Win32 s'il n'est pas possible de "s'abonner" à des notifications du filesystem

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de fermeture de fichier
    Par franc82 dans le forum C++
    Réponses: 1
    Dernier message: 08/11/2006, 17h14
  2. [VBA-E] fermeture de fichier et curseur de souris
    Par thitoux dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/08/2006, 13h17
  3. Notification de modification de fichier sous unix en java
    Par deomis dans le forum Général Java
    Réponses: 6
    Dernier message: 20/06/2006, 14h43
  4. Pb de fermeture de fichiers .js
    Par Cako19 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/12/2005, 15h17
  5. Fermeture de fichier
    Par patmaba dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 05/10/2005, 11h00

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