[C#/mono] File.Create, Sharing violation?
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:
Citation:
System.IO.IOException: Sharing violation on path /home/shaika-dzari/.AI.db
Je dois fermer l'application et l'ouvrir de nouveau et là je peux ajouter normallement.
Voici mon code au départ de l'application:
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
|
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();
}
} |
Voici mon code pour ajouter une entrée dans le fichier texte:
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
| 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();
} |
Il est à noter que l'exception lever se situe dans ma première fonction.
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!
@+