J'ai le très curieux problème suivant:
  • J’ai 2 PC qu’on appellera PC1 (un portable) et PC2 (un desktop).
  • Ces 2 PC accèdent (en écriture et lecture) à un fichier texte (lignes terminées par CRLF) situé sur un serveur NAS par le biais d’un logiciel maison qu’on appellera MonLogiciel. Lequel logiciel est installé sur les 2 PC bien sûr.

Voilà ce que je constate :
1 – Je travaille sur le PC1 (PC2 est éteint) et j’accède en écriture par MonLogiciel au fichier sur le NAS.
2 – J’éteins PC1, puis j’allume PC2.
3 – Depuis PC2, je tente de lire le fichier sur le NAS par MonLogiciel... Message d’erreur « Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus. »*!
Précision*: le fichier texte est pourtant parfaitement lisible si on l’ouvre depuis l’explorateur de fichiers Windows… Il semble donc libre*!
4 – J’attends environ 15 minutes… et tout à coup le fichier redevient accessible et s’ouvre dans mon MonLogiciel sur PC2.
5 – Je travaille sur le PC2 (PC1 est toujours éteint) et j’accède en écriture avec MonLogiciel au fichier sur le NAS.
6 – J’éteins PC2, puis je rallume PC1.
7 – Depuis PC1, je tente de lire le fichier sur le NAS avec MonLogiciel… et là ça marche sans erreur*!!!
Si je réitère les mêmes opérations (1 à 7), le phénomène se répétera*: on «*gagne*» à tous les coups*!
Pour nous résumer, l’erreur surgit quand on va de PC1 vers PC2, mais aucune erreur quand on va de PC2 vers PC1.
Les 2 PC sont sous Windows 11. Le NAS est un Synology DS720+.

Que pensez vous, SVP, de ce problème qui me laisse dubitatif ?

Ci-dessous, mes procédures d’écriture et lecture du fichier texte.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
'-------------------------------------------------------
'Procédure de lecture.
'Lecture vers une table(), TableJnl.
'-------------------------------------------------------
   Shared Function OuvreJournal(ByRef TableJnl() As String, ByVal Fichier As String) As Integer
         Dim Index As Integer

        If FileSystem.FileExists(Fichier) Then
            Try
                '(Re)Initialise le tableau.
                Array.Clear(TableJnl, 0, NbItems_MAX_JOURNAL)

                '-------------------------------------------------
                'Lecture et mémorisation du Journal.
                '-------------------------------------------------
                Index = 0
                Dim fs As FileStream = Nothing

                 fs = New FileStream(Fichier, FileMode.Open)
                 Using fsreader As StreamReader = New StreamReader(fs, System.Text.Encoding.UTF8)
                    Do Until fsreader.Peek = -1
                        TableJnl(Index) = fsreader.ReadLine
                        Index += 1
                    Loop
                End Using

                If fs IsNot Nothing Then
                    fs.Dispose()
                    fs.Close()
                End If

            Catch ex As Exception
                MessageBoxPerso(ex.Message & "Erreur de lecture du Journal.", "Erreur" & " E012", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, True)
                Return -1
            End Try
        Else
            Return -2
        End If

        'Lecture correcte, mais...
        If TableJnl(0) Is Nothing Then
            Return -3
        Else
            Return 0
        End If
    End Function

'-------------------------------------------------------
'Procédure d'écriture.
'Conforme aux recommandations Microsoft.
'-------------------------------------------------------
   Shared Function SaveJournal(ByVal NomFic As String) As Boolean
        Dim Index As Integer

        Try
            Index = 0
            Dim fs As FileStream = Nothing

            fs = New FileStream(NomFic, FileMode.Create)
            Using writer As StreamWriter = New StreamWriter(fs, System.Text.Encoding.UTF8, , False)
                Do While TableJournal(Index) <> Nothing
                    writer.WriteLine(TableJournal(Index))
                    Index += 1
                Loop
            End Using

            If fs IsNot Nothing Then
                fs.Dispose()
                fs.Close()
            End If

        Catch ex As Exception
            MessageBoxPerso(ex.Message & " Erreur écriture Journal.", "Erreur" & " E009", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, True)
            Return False
        End Try
        Return True
    End Function