Problème lors de lecture ou écriture fichier XML.
Bonjour à tous.
J'ai un bout de mon code qui m'affiche un défaut lors de son exécution.
Voici le code en question :
Code:
1 2 3 4
| Private Sub Demarrage_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'S'exécute lors du chargement de la fenêtre Demmarrage.'
LitClasses(Nom_Fichier_Data) 'Exécute la procédure LitClasses.'
LitParametres(Nom_Fichier_Param) 'Exécute la procédure LitParamètres.'
End Sub 'Fin de procédure.' |
Code de démarrage de mon application.
La procédure LitClasses est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10
| Sub LitClasses(ByVal FileNamedecrypt As String)
If File.Exists(FileNamedecrypt) Then
Données = LitDataXMLData(FileNamedecrypt) 'Exécute la fonction LitDataXMLData.'
Else
Données = New Data
EcritDataXMLData(FileNamedecrypt, Données) 'Exécute la procédure EcritDataXMLData avec les paramètres FileNamedecrypt et Données.'
End If
End Sub |
Cette partie là fonctionne.
La fonction LitDataXMLData est la suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Function LitDataXMLData(ByVal filename As String) As Data
Try
Using objStreamReader As New IO.StreamReader(filename)
Try
Return DirectCast((New XmlSerializer(GetType(Data))).Deserialize(objStreamReader), Data)
Catch ex As Exception
Erreur = True
MessageBox.Show("Echec de la lecture." & ex.Message)
End Try
End Using
Catch ex As Exception
Erreur = True
MessageBox.Show("Fichier inaccessible." & ex.Message)
End Try
Return Nothing
End Function |
Là aussi pas de problème.
La procédure EcritDataXMLData :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Sub EcritDataXMLData(ByVal filename As String, lesClasses As Data)
Try
Using objStreamWriter As StreamWriter = New StreamWriter(filename)
Try
Dim xsClasses As New XmlSerializer(GetType(Data), New XmlRootAttribute("Data"))
xsClasses.Serialize(objStreamWriter, lesClasses)
Catch ex As Exception
Erreur = True
MessageBox.Show("Echec de l'écriture." & ex.Message)
End Try
End Using
Catch ex As Exception
Erreur = True
MessageBox.Show("Fichier inaccessible." & ex.Message)
End Try
End Sub |
Toute cette partie fonctionne.
Maintenant, la procédure LitParamètres (celle qui me plante le programme) :
Code:
1 2 3 4 5 6 7 8 9 10
| Sub LitParametres(ByVal FileNamedecrypt As String)
If File.Exists(FileNamedecrypt) Then 'If File.Exists(FileNamecrypt) Then
Paramètres = LitDataXMLPropriétés(FileNamedecrypt)
Else
Paramètres = New Propriétés 'Créé un nouvel objet Propriétés de nom "Paramètres".'
EcritDataXMLPropriétés(FileNamedecrypt, Paramètres)
End If
End Sub |
Il faut savoir que :
Code:
Public Paramètres As Propriétés
et que :
Code:
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
| <XmlRoot("Propriétés")>
Public Class Propriétés
<XmlElement("Couleur")>
Public Property Valeurs_RVB As New Couleurs
<XmlAttribute("Activer_Modification_MDP")>
Public Property Act_MDP As New Activ_MDP
<XmlElement("Classe")>
Public Property Classe As New List(Of Classes)
End Class
Public Class Couleurs
<XmlAttribute("Rouge")>
Public Property Rouge As Integer = 255
<XmlAttribute("Vert")>
Public Property Vert As Integer = 255
<XmlAttribute("Bleu")>
Public Property Bleu As Integer = 128
End Class
Public Class Activ_MDP
<XmlAttribute("Valeur")>
Public Property Autor_MDP As Boolean = False
End Class
Public Class Classes
<XmlAttribute("Nom_Classe")>
Public Property Nom_Classe As String = ""
<XmlElement("Exercice")>
Public Property Exercice As New List(Of Exercices)
End Class
Public Class Exercices
<XmlAttribute("Titre")>
Public Property Titre As String = ""
<XmlAttribute("Catégorie")>
Public Property Catégorie As String = ""
<XmlAttribute("Règles")>
Public Property Règles As String = ""
<XmlElement("Ligne_Exercice")>
Public Property Ligne_Exercice As New List(Of Lignes_Exos)
End Class
Public Class Lignes_Exos
<XmlAttribute("Type_Réponse")>
Public Property Type_Réponse As String = ""
<XmlAttribute("Phrase_1")>
Public Property Phrase_1 As String = ""
<XmlAttribute("Réponse")>
Public Property Réponse As String = ""
<XmlElement("Choix_Mots")>
Public Property Choix_Mots As New List(Of Choix_de_mots)
<XmlAttribute("Phrase_2")>
Public Property Phrase_2 As String = ""
End Class
Public Class Choix_de_mots
<XmlAttribute("Mot")>
Public Property Mots As String = ""
End Class |
Pour ce qui est de la fonction LitDataXMLPropriétés et de la procédure EcritDataXMLPropriétés :
Code:
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
| Function LitDataXMLPropriétés(ByVal filename As String) As Propriétés 'Créé la fonction lecture du fichier xml'
Try 'Essaye le code suivant :'
Using objStreamReader As New StreamReader(filename) 'Utilise le flux de données du fichier "filename"'
Try 'Essaye le code suivant : '
Return DirectCast((New XmlSerializer(GetType(Propriétés))).Deserialize(objStreamReader), Propriétés) 'Sérialise le fichier xml'
Catch ex As Exception 'Si l'essais échoue'
Erreur = True 'Met le booléen en valeur "vrai"'
MessageBox.Show("Echec de la lecture." & ex.Message) 'Affiche un message d'erreur'
End Try 'Fin de l'essais du code'
End Using 'Coupe toutes ressources utilisées pour créer le flux.'
Catch ex As Exception 'Si le fichier n'existe pas'
Erreur = True 'Met le booléen en valeur "vrai"'
MessageBox.Show("Fichier inaccessible." & ex.Message) 'Affiche un message contenant l'erreur.'
End Try 'Fin de l'essais du code'
Return Nothing
End Function
Sub EcritDataXMLPropriétés(ByVal filename As String, paramètres As Propriétés)
Try
Using objStreamWriter As StreamWriter = New StreamWriter(filename)
Try
Dim xsPropriety As New XmlSerializer(GetType(Propriétés), New XmlRootAttribute("Propriétés"))
xsPropriety.Serialize(objStreamWriter, paramètres)
Catch ex As Exception
Erreur = True
MessageBox.Show("Echec de l'écriture." & ex.Message)
End Try
End Using
Catch ex As Exception
Erreur = True
MessageBox.Show("Fichier inaccessible." & ex.Message)
End Try
End Sub |
C'est donc lors de la lecture ou l'écriture de mon fichier de propriétés, que le logiciel plante et me dit qu'il ne peut lire, ni même écrire (ou créer) mon fichier...
J'ai beau tourner mon code dans tous les sens je ne trouve pas....
Désolé pour toute cette lecture et merci de votre aide par avance.