Bonsoir à tous,
Pouvez vous m'aider à corriger un bug ? Je traîne celui-ci depuis 2 ans et j'ai enfin décider d'y regarder de plus prêt :
J'ai grosso-modo un plantage par jour et pour vérifier j'ai placé un bloc Try/Catch et tracé l'erreur vers mon fichier trace.log.
Donc forcement je n'ai plus de plantage mais en contre partie je ne traite pas l'exception : Visiblement il s'agit de chemin trop long qui sont interceptés par FileSystemWatcher.

Déjà je m’étonne que FileSystemWatcher puisse voir ce genre de chemin mais admettons. Ce qui m’étonne aussi c'est que FileSystemWatcher vois des chemins avec des noms de dossiers tronqués avec des "~" : du style "M:\Mon Chem~Trop Long" pour "M:\Mon Chemin Est Trop Long" par exemple.
Pour moi ces chemins ne sont pas valide donc je n'ai aucune raison de les traiter mais je serais très intéressé d'avoir votre avis sur la question si vous avez déjà été confronté au problème.

Voici ce que mon trace.log me dit (voir lignes 40158 et 40166) :
[40153] 11:01:56 587 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\11F3DF40.tmp" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40154] 11:01:56 754 -Verbose- [X_project.modFswTag/ UpdatePaths] => L'extension du fichier "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\11F3DF40.tmp" est rejetée par le filtre, celui-ci est ignoré par UpdatePath
[40155] 11:01:57 75 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\11F3DF40.tmp" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40156] 11:01:57 216 -Verbose- [X_project.modFswTag/ UpdatePaths] => L'extension du fichier "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\11F3DF40.tmp" est rejetée par le filtre, celui-ci est ignoré par UpdatePath
[40157] 11:01:57 528 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\E195D641.tmp" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40158] 11:01:57 871 -Critical- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié complet doit comprendre moins de*260*caractères et le nom du répertoire moins de 248*caractères. à System.IO.PathHelper.Append(Char value)
à System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
à System.IO.Path.GetPathRoot(String path)
à System.IO.RenamedEventArgs.get_OldFullPath()
à X_project.modFswTag.PathInfos..ctor(FileSystemEventArgs e)
à X_project.modFswTag.ProcessFileSystemEvents()
[40159] 11:01:57 871 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\E195D641.tmp" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40160] 11:01:58 27 -Verbose- [X_project.modFswTag/ UpdatePaths] => L'extension du fichier "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\E195D641.tmp" est rejetée par le filtre, celui-ci est ignoré par UpdatePath
[40161] 11:01:58 27 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\11F3DF40.tmp" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40162] 11:01:58 167 -Verbose- [X_project.modFswTag/ UpdatePaths] => L'extension du fichier "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\11F3DF40.tmp" est rejetée par le filtre, celui-ci est ignoré par UpdatePath
[40163] 11:01:58 167 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40164] 11:01:58 323 -Verbose- [X_project.modFswTag/ UpdatePaths] => Un attribut du dossier "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2" a changé, celui-ci est ignoré par UpdatePath
[40165] 11:01:58 323 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\9505-FDT-509 FE SSI Phase 1 Câbles Arret Technique COM2 BUS2 Local SD45.doc" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
[40166] 11:01:58 464 -Critical- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié complet doit comprendre moins de*260*caractères et le nom du répertoire moins de 248*caractères. à System.IO.PathHelper.Append(Char value)
à System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
à System.IO.Path.GetFullPathInternal(String path)
à System.IO.FileInfo.Init(String fileName, Boolean checkHost)
à System.IO.FileInfo..ctor(String fileName)
à X_project.modFswTag.PathInfos..ctor(FileSystemEventArgs e)
à X_project.modFswTag.ProcessFileSystemEvents()
[40167] 11:01:58 464 -Verbose- [X_project.modFswTag/ ProcessFileSystemEvents] => Le chemin "M:\AAQ2~4.095\2-Etudes\DT4~1.85-\2-3DOE~1\5CERTI~1\5FB1F~1.2FI\FICHED~2\9505-FDT-509 FE SSI Phase 1 Câbles Arret Technique COM2 BUS2 Local SD45.doc" (stocké dans le buffer par FsWatcher) va être traité par le thread [9] <ProcessFileSystemEventsArg>
L'objet _fileSystemEvents alimenté par les événements de FileSystemWatcher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Private _fileSystemEvents As New ConcurrentQueue(Of FileSystemEventArgs)()
La procédure ou j'ai mis un bloc Try / Catch :
Code : 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
21
22
23
24
25
26
 
Module modFswTag
......
    Private Sub ProcessFileSystemEvents()
        Thread.CurrentThread.Name = ("ProcessFileSystemEventsArg")
        While Not _stopRequested
            Dim e As FileSystemEventArgs = Nothing
            ' Traiter l'évènement
            ''''
            If _fileSystemEvents.TryDequeue(e) Then
                Mysource1.TraceEvent(TraceEventType.Verbose, 0, String.Format("Le chemin ""{0}"" (stocké dans le buffer par FsWatcher) va être traité par le thread [{1}] <{2}>", e.FullPath, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.Name))
                Try
                    Dim PathInfo As New PathInfos(e)
                    UpdatePaths(PathInfo)
                Catch ex As Exception
                    Mysource1.TraceEvent(TraceEventType.Critical, 0, ex.Message & ex.StackTrace)
                End Try
 
            Else
                ' rien dans la file, on attend un peu
                Thread.Sleep(50)
            End If
        End While
    End Sub
......
End Module
Ma classe ou visiblement se produit l'erreur :
Code : 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
21
22
23
24
25
26
27
28
29
30
31
 
Module modFswTag
......
    Public Class PathInfos
        Public Sub New(ByVal e As FileSystemEventArgs)
            Select Case e.ChangeType
                Case WatcherChangeTypes.Changed
                    _EventType = EventsTag.FswChanged
                Case WatcherChangeTypes.Created
                    _EventType = EventsTag.FswCreated
                Case WatcherChangeTypes.Deleted
                    _EventType = EventsTag.FswDeleted
                Case WatcherChangeTypes.Renamed
                    _EventType = EventsTag.FswRenamed
            End Select
 
            _Fi = New FileInfo(e.FullPath)
            GetInfos(_Fi)
            _Path = e.FullPath
            _OldPath = Nothing
 
            If TypeOf (e) Is RenamedEventArgs Then
                Dim e1 As RenamedEventArgs = CType(e, RenamedEventArgs)
                _OldPath = e1.OldFullPath
            End If
 
        End Sub
......
     End Class
......
End Module
Merci beaucoup, pour votre réponse.