none
probleme de modification dans base de donnée xml nen c# RRS feed

  • Question

  • bonjour j'utilise la langage c# pour la réalisation d'un projet.

    jusque là j'ai réussi a enregistrer et charger mes données en xml, cependant je rencontre une erreur.

    lorsque je charge mes données en xml cela s'affiche, mais quand j'essaie de modifier les informations afficher et de l'enregistrer a nouveau on me dit: que le fichier est utiliser par un autre processus.

    ma question est de savoir : comment faire en sorte que le fichier ne soit pas maintenu ouvert, afin que je puisse l'enregistrer a nouveau sous le même nom.

    voici le code que j'utilise pour charger mes données xml:

    l'erreur se trouve sur la partie en gras.

    try
                {
                    if (File.Exists(textBox60.Text))
                    {

                        XmlSerializer xs = new XmlSerializer(typeof(information));
                        FileStream read = new FileStream(textBox60.Text, FileMode.Open, FileAccess.ReadWrite);
                        information info = (information)xs.Deserialize(read);
                        textBox1.Text = info.Data1;
                        textBox2.Text = info.Data2;
                        textBox3.Text = info.Data3;
                       


                        MessageBox.Show("DONNEES AFFICHEES", "Notifications", MessageBoxButtons.OK, MessageBoxIcon.Information);


                    }
                    else if (textBox60.Text == "")
                    {
                        MessageBox.Show("Veuillez indiquer le mois que vous voulez atteindre", "Notifications", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                catch
                {
                    MessageBox.Show("Fichier déjà ouvert", "Notifications", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

    merci pour votre aide.


    Cardinal dev

    lundi 28 septembre 2015 15:57

Réponses

  • Bonjour,

    La classe FileStream implémente l'interface IDisposable. Cela signifie qu'elle utilise des ressources que vous devez libérer explicitement en utilisant sa méthode Dispose() (un Handler sur le fichier)

    De façon général, quand vous utilisez une classe qui implémente IDisposable, il faut utiliser sa méthode Dispose quand on n'en a plus besoin.

    Il existe même une syntaxe en C# qui le fait pour vous :

    using (var read = new FileStream(textBox60.Text, FileMode.Open, FileAccess.ReadWrite))
    {
         // do what you want with it
    }
    En "sortant" de ce bloc, la méthode Dispose est appelée (c'est fait par derrière par le compilateur C#).

    Explication sur using sur MSDN


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 septembre 2015 05:27

Toutes les réponses

  • Bonjour,

    La classe FileStream implémente l'interface IDisposable. Cela signifie qu'elle utilise des ressources que vous devez libérer explicitement en utilisant sa méthode Dispose() (un Handler sur le fichier)

    De façon général, quand vous utilisez une classe qui implémente IDisposable, il faut utiliser sa méthode Dispose quand on n'en a plus besoin.

    Il existe même une syntaxe en C# qui le fait pour vous :

    using (var read = new FileStream(textBox60.Text, FileMode.Open, FileAccess.ReadWrite))
    {
         // do what you want with it
    }
    En "sortant" de ce bloc, la méthode Dispose est appelée (c'est fait par derrière par le compilateur C#).

    Explication sur using sur MSDN


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 29 septembre 2015 05:27
  • merci de beaucoup de votre aide. mon problème est résolu.

    Cardinal dev

    mardi 29 septembre 2015 11:06
  • Bonjour,

    La classe FileStream implémente l'interface IDisposable. Cela signifie qu'elle utilise des ressources que vous devez libérer explicitement en utilisant sa méthode Dispose() (un Handler sur le fichier)

    De façon général, quand vous utilisez une classe qui implémente IDisposable, il faut utiliser sa méthode Dispose quand on n'en a plus besoin.

    Il existe même une syntaxe en C# qui le fait pour vous :

    using (var read = new FileStream(textBox60.Text, FileMode.Open, FileAccess.ReadWrite))
    {
         // do what you want with it
    }
    En "sortant" de ce bloc, la méthode Dispose est appelée (c'est fait par derrière par le compilateur C#).

    Explication sur using sur MSDN


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    Je confirme Mr Richard,

    Si on a un objet qu'on va pas utiliser après un traitement ou une méthode, il vaut mieux le détruire pour libérer un eu de mémoire et alléger l'application et le processeur bien sur :) .

    Cordialement,

    Marwane OUAFIK.

    jeudi 8 octobre 2015 09:58