Bonjour à tous ,
Voici l'exception que je rencontre :
IOException : The process cannot access the file because it is being used by another process.
Voici, en gros, mon traitement : J'enregistre la valeur de chaque contrôle présent sur une Form de type Frm_Navette dans le cas ci-dessous. Comme j'écris d'autres informations avant les valeurs des contrôles (TextBox, DateTimePicker, ComboBox...) je passe en paramètre le flux d'écriture :
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
 
Private Sub EnregistrerFichier(ByRef Frm_Active, ByVal Path)
Dim Str_Writer As StreamWriter = New StreamWriter(CType(Path, String))
 
If Frm_Active.GetType.Equals(GetType(Frm_Navette)) Then
    Sauvegarde_Controles(Frm_Active.Tbl_Fiche_Navette, Str_Writer, Path)  
' Si la form est d'un certain type, j'appelle ma fonction de sauvegarde
End If
Str_Writer.Close()  ' Fermeture du flux
 
Directory.Move(Path_Old_Troncon, Path_New_Troncon) ' on déplace le contenu d'un répertoire existant (qui contient le fichier texte que 
'je viens de créer avec ces 2 méthodes) vers un autre que 
'j'ai créé dans une autre portion de code.. et qui existe aussi, j'ai vérifié dans mon debug.
' Pourtant l'exception mentionnée ci-dessus apparaît ici.
End Sub
 
Private Sub Sauvegarde_Controles(ByVal Conteneur As Object, ByVal Str_Writer As StreamWriter, ByVal Path_File As String)
        For Each ctrl As Object In Conteneur.Controls
            If TypeOf ctrl Is TableLayoutPanel Or TypeOf ctrl Is Panel Then
                Sauvegarde_Controles(ctrl, Str_Writer, Path_File)                                                                            
' C'est une fonction récursive qui s'affranchit du nombre de conteneurs
            Else           ' Traitement lorsque l'on arrive sur les contrôles à sauvegarder
...
            End If
L'exception apparaît donc lors de la tentative de déplacement de répertoire. Dans mes essais, le répertoire de départ ne contenait que le fichier créé ci-dessus. J'ai essayé en le supprimant avant d'exécuter le Directory.Move, en mode pas-à-pas et l'exception est tout de même levée... Donc cela ne semble pas venir du fichier.

Selon vous pourquoi ai-je cette exception alors que le seul flux utilisé sur le seul fichier du répertoire est refermé?
Cela peut-il venir d'un process sur le répertoire de départ?
J'espère avoir été assez clair,,

Merci de vos réponses.

Nixar