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

Développement Windows Discussion :

VB.NET FileSystemWatcher : docs Word non signalés


Sujet :

Développement Windows

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2013
    Messages : 22
    Points : 22
    Points
    22
    Par défaut VB.NET FileSystemWatcher : docs Word non signalés
    Bonjour,

    J'utilise le composant FileSystemWatcher pour détecter les modifications sur des fichiers afin de les sauvegarder en temps réel.
    Mais les documents Word ne déclenchent pas l'événement Changed lorsqu'ils sont modifiés. A la place, le programme détecte la création, la modification et la suppression des fichiers temporaires "~$***.docx" (remplacer les astérisques par le nom du fichier Word sans les deux premiers caractères) et "~WRD####.tmp" (les dièses sont des chiffres variables).
    Lorsque le document Word est modifié, la date de modification est pourtant bien mise à jour dans les attributs du fichier.

    En revanche, la création d'un document Word déclenche bien l'événement Created.

    Voici mon code :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        Dim filewatcher As New FileSystemWatcher(sourdir) With {
                    .Filter = "*.*",
                    .NotifyFilter = NotifyFilters.LastAccess Or
                                    NotifyFilters.LastWrite Or
                                    NotifyFilters.FileName Or
                                    NotifyFilters.DirectoryName Or
                                    NotifyFilters.Size,
                    .IncludeSubdirectories = True
                 }
     
                AddHandler filewatcher.Created, AddressOf FileChanged
                AddHandler filewatcher.Changed, AddressOf FileChanged
                AddHandler filewatcher.Deleted, AddressOf FileDeleted
                AddHandler filewatcher.Renamed, AddressOf FileRenamed
     
                filewatcher.EnableRaisingEvents = True
     
    Private Sub FileChanged(ByVal sender As Object, ByVal e As FileSystemEventArgs)
    'sauvegarde du fichier
    End Sub

    Je pourrais essayer de déduire le fichier réellement modifié par l'utilisateur d'après le fichier temporaire "~$***.docx", mais cela pourrait poser des problèmes si les noms de plusieurs documents ne différent que par leurs deux premiers caractères, et ce serait plus simple si le FileSystemWatcher faisait correctement son travail.
    Connaîtriez-vous la cause de ce problème et un moyen de le résoudre ?

    Cordialement,
    E__Man.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    À première vue cela me semble tout à fait normal. FileSystemWatcher sert à suivre les changements au système de fichier et la modification d'un document Word n'affecte le système de fichiers qu'au moment de son enregistrement.

    Word enregistre les fichiers temporaires (tmp) à un intervalle spécifié dans les options de Word. Et la copie de sauvegarde de Word ("~$***.docx") est, pour autant que je me souvienne, l'avant-dernier enregistrement, si on considère l'enregistrement "tout frais" comme étant le dernier enregistrement. Donc, le fichier de sauvegarde existant est effacé, le nouveau fichier de sauvegarde est celui qui vient d'être, disons, écrasé et le fichier "officiel" est l'enregistrement "tout frais".

    Toujours à première vue, si tu veux tester la modification du fichier de sauvegarde, tu as dans 99% de chances que dès qu'il est modifié, c'est que le document Word actuel vient d'être enregistré.

    Tu peux aussi jeter un œil sur cette source. Il y a quelques trucs pour lire les propriétés d'un fichier Office.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/03/2010, 11h07
  2. [VB.NET]Convertir un doc Word en PDF
    Par olbi dans le forum VB.NET
    Réponses: 15
    Dernier message: 15/03/2010, 08h13
  3. lire un doc word via vb.net ou asp.net
    Par ado.net dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 10/04/2008, 13h12
  4. lister tous les docs word en vb.net
    Par zit_zit dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/10/2007, 13h06
  5. [VB.Net] DataAdapter, Affichage si non null ???
    Par Sophy dans le forum ASP.NET
    Réponses: 12
    Dernier message: 20/02/2004, 18h03

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