Bonjour à tous,
J'écris une petite application pour recenser le contenu de mes dvd de données.
J'utilise pour ce faire un simple fichier texte et un affichage dans un treeview.
Au lancement de l'application, elle vérifie si le fichier texte existe. S'il n'existe pas, j'utilise file.create pour créer le fichier.
Mon problème est que lors de mon premier lancement, le fichier est bien créer mais je ne peux y ajouter de texte immédiatement. Si je tente un ajout immédiat, j'ai un message d'erreur (mon premier catch) dont la première phrase est:
Je dois fermer l'application et l'ouvrir de nouveau et là je peux ajouter normallement.System.IO.IOException: Sharing violation on path /home/shaika-dzari/.AI.db
Voici mon code au départ de l'application:
Voici mon code pour ajouter une entrée dans le 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 protected void DataReading() { // Variables nécessaires StreamReader sr = null; StreamWriter sw = null; string Line =""; // Nettoyage préalable du treeview AnimeDB.Clear(); // Lecture ou création du fichier texte try{ if (!File.Exists(m_Conf)){ File.Create(m_Conf); } else{ sr = new StreamReader(m_Conf); while ((Line = sr.ReadLine()) != null){ AnimeDB.AppendValues(Line, sr.ReadLine()); } } } // Erreur au chargement avec dialog catch (Exception EX){ MessageDialog md = new MessageDialog (null,DialogFlags.DestroyWithParent,MessageType.Error, ButtonsType.Close, "Erreur de Chargement des données!\r\n\r\n"+EX.ToString()); md.Run(); md.Destroy(); } finally{ if (sw != null) sw.Close(); if (sr != null) sr.Close(); } }
Il est à noter que l'exception lever se situe dans ma première fonction.
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 protected virtual void btnAdd_Click(object sender, System.EventArgs e) { // Variables nécessaires StreamWriter sw = null; // Vérification des champs à ajouter if (txtNom.Text == "" || txtNoDVD.Text == ""){ MessageDialog md = new MessageDialog (null,DialogFlags.DestroyWithParent,MessageType.Error, ButtonsType.Close, "Veuillez remplir les deux champs\n\rpour ajouter une entrée."); md.Run(); md.Destroy(); return; } // Si valide, on ajoute l'entrée try{ // Copie du fichier existant...sécurité File.Copy(m_Conf, m_Confsave, true); // Ajout au fichier texte sw = File.AppendText(m_Conf); sw.WriteLine(txtNom.Text); sw.WriteLine(txtNoDVD.Text); } catch (Exception EX){ MessageDialog md = new MessageDialog (null,DialogFlags.DestroyWithParent,MessageType.Error, ButtonsType.Close, "Erreur d'écriture des données!\r\n\r\n"+EX.ToString()); md.Run(); md.Destroy(); } finally{ if (sw != null) sw.Close(); } DataReading(); }
Dois-je libéré d'une manière quelquonque les ressource après un File.Create ou lui passer un Filemode ?
Merci de votre aide!
@+
Partager