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.