IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Lecture et Ecriture d'un fichier .xml


Sujet :

Windows Forms

  1. #1
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut [C#]Lecture et Ecriture d'un fichier .xml
    Là, y'a un truc que je comprends pas dans mon code.

    J'ai une méthode de lecture :

    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
    public MainDataSet LoadData()
            {
                XmlDocument MyDoc = new XmlDocument();
                MainDataSet MyDs = new MainDataSet();
                MainDataSet.GlobalDataRow MyRow = MyDs.GlobalData.NewGlobalDataRow();
     
                if(File.Exists("data.xml"))
                {
                    MyDoc.Load("data.xml");
                    // Récupération des paramètres généraux
                    MyRow.Product = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/SoftWare").InnerText;
                    MyRow.BasePath = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/DataBaseFile").InnerText;
                    MyRow.CheckBoxClientState = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/CheckBoxClientState").InnerText;
                    MyRow.ListClientPath = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/ClientListPath").InnerText;
                    MyRow.CheckBoxProviderState = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/CheckBoxProviderState").InnerText;
                    MyRow.ListProviderPath = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/ProviderListPath").InnerText;
                    MyRow.Ticks = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/Ticks").InnerText;
                    MyRow.NextUpdate = MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/NextUpdate").InnerText;
     
                    MyDs.GlobalData.AddGlobalDataRow(MyRow);
     
                    // Chargement des données clients
                    for (int i = 0; i < MyDoc.SelectNodes("ExchangeUpdater/Client/Field").Count; i++)
                    {
                        MyDs.Client.AddClientRow(MyDoc.SelectNodes("ExchangeUpdater/Client/Field").Item(i).ChildNodes[0].InnerText, bool.Parse(MyDoc.SelectNodes("ExchangeUpdater/Client/Field").Item(i).ChildNodes[1].InnerText), MyDoc.SelectNodes("ExchangeUpdater/Client/Field").Item(i).ChildNodes[2].InnerText);
                    }
                    // Chargement des données fournisseurs
                    for (int i = 0; i < MyDoc.SelectNodes("ExchangeUpdater/Provider/Field").Count; i++)
                    {
                        MyDs.Provider.AddProviderRow(MyDoc.SelectNodes("ExchangeUpdater/Provider/Field").Item(i).ChildNodes[0].InnerText, bool.Parse(MyDoc.SelectNodes("ExchangeUpdater/Provider/Field").Item(i).ChildNodes[1].InnerText), MyDoc.SelectNodes("ExchangeUpdater/Client/Field").Item(i).ChildNodes[2].InnerText);
                    }                
                }
                return MyDs;
            }

    Et une méthode 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
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
     public bool SaveData(MainDataSet MyDs)
            {
                XmlDocument MyDoc = new XmlDocument();
     
                if (File.Exists("data.xml"))
                {
                    // Si le fichier existe - Ouverture et vidage
                    MyDoc.Load("data.xml");
                }
                else
                {
                    // Si le fichier n'existe pas création
                    MessageBox.Show("Le fichier de données est corrompu ou inexistant", "Erreur 10", MessageBoxButtons.OK);
                    return false;
                }
     
                // Enregistrement des données globales
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/SoftWare").InnerText = MyDs.GlobalData[0].Product;
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/DataBaseFile").InnerText = MyDs.GlobalData[0].BasePath;
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/CheckBoxClientState").InnerText = MyDs.GlobalData[0].CheckBoxClientState;
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/ClientListPath").InnerText = MyDs.GlobalData[0].ListClientPath;
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/CheckBoxProviderState").InnerText = MyDs.GlobalData[0].CheckBoxProviderState;
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/ProviderListPath").InnerText = MyDs.GlobalData[0].ListProviderPath;
                MyDoc.SelectSingleNode("ExchangeUpdater/GeneralData/Ticks").InnerText = MyDs.GlobalData[0].Ticks;
                // Enregistrement des données clients
                MyDoc.SelectSingleNode("ExchangeUpdater/Client").RemoveAll();
     
                // Récupère les fichiers à enregistrer
                for (int i = 0; i < MyDs.Client.Count; i++)
                {
                    if (MyDs.Client[i].Synchronize)
                    {
                        XmlNode el = MyDoc.CreateNode(XmlNodeType.Element, "Field", null);
                        XmlElement element = MyDoc.CreateElement("ExchangeData");
                        element.InnerText = MyDs.Client[i].ExchangeData;
                        el.AppendChild(element);
                        XmlElement element1 = MyDoc.CreateElement("Synchronize");
                        element1.InnerText = MyDs.Client[i].Synchronize.ToString();
                        el.AppendChild(element1);
                        XmlElement element2 = MyDoc.CreateElement("SoftwareData");
                        element2.InnerText = MyDs.Client[i].SoftwareData;
                        el.AppendChild(element2);
     
                        MyDoc.SelectSingleNode("ExchangeUpdater/Client").AppendChild(el);
                    }
                }
     
                // Enregistrement des données fournisseurs
                MyDoc.SelectSingleNode("ExchangeUpdater/Provider").RemoveAll();
     
                // Récupère les fichiers à enregistrer
                for (int i = 0; i < MyDs.Provider.Count; i++)
                {
                    if (MyDs.Provider[i].Synchronize)
                    {
                        XmlNode el = MyDoc.CreateNode(XmlNodeType.Element, "Field", null);
                        XmlElement element = MyDoc.CreateElement("ExchangeData");
                        element.InnerText = MyDs.Provider[i].ExchangeData;
                        el.AppendChild(element);
                        XmlElement element1 = MyDoc.CreateElement("Synchronize");
                        element1.InnerText = MyDs.Provider[i].Synchronize.ToString();
                        el.AppendChild(element1);
                        XmlElement element2 = MyDoc.CreateElement("SoftwareData");
                        element2.InnerText = MyDs.Provider[i].SoftwareData;
                        el.AppendChild(element2);
     
                        MyDoc.SelectSingleNode("ExchangeUpdater/Provider").AppendChild(el);
                    }
                }            
                MyDoc.Save("data.xml");
                return true;
            }
    Et bien ça lit bien le fichier lorsque j'appelle ma méthode, mais lorsque j'appelle ma méthode d'écriture il m'annonce que le fichier est inexistant alors que c'est le même que celui que je lis...

    Une idée de la conn**e que j'ai faite ??

    Merci pour vos réponses

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut


    C'est la même application chargée de la lecture/ecriture :

    Le fichier, il se trouve bien dans le répertoire de ton application :

  3. #3
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Citation Envoyé par Morpheus
    Ca m'a fait pareil
    Citation Envoyé par Morpheus
    C'est la même application chargée de la lecture/ecriture :
    Oui c'est la même application. C'est deux méthodes se trouvent dans la même classe, le même fichier.

    Citation Envoyé par Morpheus
    Le fichier, il se trouve bien dans le répertoire de ton application :
    Oui, il est dans le même répertoire que mon application. Ce qui m'ennuie le plus c'est que j'arrive à le lire, c'est la réécriture qui foire...

    Dans la méthode SaveData() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (File.Exists("data.xml"))
    me retourne toujours false... alors que dans la méthode LoadData ça marche


    J'ai oublié de préciser que je suis sur du c#2.0 avec VS2005

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Et si tu essayes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (File.Exists(Application.StartupPath + @"\" + "data.xml"))
    pour voir :

  5. #5
    Expert confirmé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Points : 4 093
    Points
    4 093
    Par défaut
    Ca fonctionne avec ça.

    J'ai trouvé l'explication en fouillant avec le debugger.
    J'ai un FileOpenDialog dans ma page, et quand je "browse", ca change le rep par défaut. Donc au lieu de chercher le xml dans le rep par défaut de mon appli, ça allait le chercher dans le rep que j'ai "browser".

    Merci Morpheus

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture ecriture d'un fichier xml sous android
    Par ouarda090 dans le forum Android
    Réponses: 5
    Dernier message: 03/03/2014, 12h07
  2. Lecture/Ecriture d'un fichier XML
    Par andlio dans le forum Windows
    Réponses: 2
    Dernier message: 18/01/2007, 21h15
  3. [VB.NET] Ecriture d'un fichier XML
    Par Le-Cortex dans le forum ASP.NET
    Réponses: 13
    Dernier message: 28/04/2004, 13h57
  4. Réponses: 2
    Dernier message: 26/09/2003, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo