[C#] Problemen bij overschrijven xml file

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • xyanide
  • Registratie: September 2006
  • Laatst online: 07:21
Ik probeer een applicatie te bouwen welke een xml bestand gebruikt voor de instellingen.
k ben hier nog een flinke beginner in en haal zoveel mogelijk informatie van het internet af, maar voor dit probleem heb ik helaas geen oplossing kunnen vinden via google of op tweakers.

Het XML bestand ziet er zo uit:
C#: settings.xml
1
2
3
4
5
6
7
8
9
10
<?xml version='1.0'?>
<settings>
  <settingtype type="startfirsttime">
    <startedfirsttime>yes</startedfirsttime>    
  </settingtype>               
  <settingtype type="Startpage">
    <url>http://www.google.nl</url>
    <websitename>Google.nl</websitename>
  </settingtype>
</settings>



Tijdens het opstarten van de applicatie wordt er gekeken in het xml bestand of dit de eerste keer is.

De code die ik hiervoor gebruik is:

C#: Form1.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                System.IO.StreamReader sr = new System.IO.StreamReader(@"Settings.xml");
                System.Xml.XmlTextReader xr = new System.Xml.XmlTextReader(sr);
                System.Xml.XmlDocument settings = new System.Xml.XmlDocument();
                settings.Load(xr);
                // Verbinding met XML document maken
                System.Xml.XmlNodeList settingitems = settings.SelectNodes("settings/settingtype");
                System.Xml.XmlNode firsttime = settingitems.Item(0).SelectSingleNode("startedfirsttime");
                // navigeren naar het startedfirsttime veld
                if (firsttime.InnerText == "yes")
                {
                    this.TopMost = false;
                    ChangeSettings changesettings = new ChangeSettings();
                    changesettings.Show();
                    // Settings scherm openen
                }


Wanneer dit het geval is wordt een nieuw form genaamd ChangeSettings.cs geopend.

Bovenstaande functioneert allemaal top, tijdens het opstarten wordt er gecontroleerd of startedfirsttime op "yes" staat waarna er een nieuw form wordt geopend

Het probleem zit hem in ChangeSettings.cs.
In het settings formulier wil ik de instellingen in het XML bestand kunnen aanpassen.
Dit doe ik met de volgende code:

C#: ChangeSettings.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
            System.IO.StreamReader sr = new System.IO.StreamReader(@"settings.xml");
            System.Xml.XmlTextReader xr = new System.Xml.XmlTextReader(sr);
            System.Xml.XmlDocument settings = new System.Xml.XmlDocument();
            settings.Load(xr);
            XmlNode node;
            node = settings.DocumentElement;
            foreach (XmlNode node1 in node.ChildNodes)
                foreach (XmlNode node2 in node1.ChildNodes)
                    if (node2.InnerText == "yes")
                    {
                        node2.InnerText = "no";
                    }
            settings.Save(@"settings.xml");


Hier krijg ik de volgende foutmelding:
System.IO.IOException: Kan geen toegang krijgen tot het bestand D:\C#\Oefen code\Progje\Progje\bin\Debug\settings.xml omdat het wordt gebruikt door een ander proces.
Ik heb de code ook al in mijn hoofdformulier geplaatst (Form1.cs) maar daar wordt dezelfde foutmelding gegeven.
Tevens heb ik
C#:
1
xr.Close();
geprobeerd en
C#:
1
sr.Close();
Maar beiden mochten niet baten.

Weet iemand hoe dit is op te lossen?
Alvast bedankt voor jullie hulp :>

*Edit 1: Een groot deel van de informatie heb ik van How To Modify and Save XML with the XmlDocument Class in the .NET Framework SDK afgehaald.

Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
En de combinatie?
In deze volgorde:
C#:
1
2
xr.Close();
sr.Close();

Je geeft ze beiden op, maar je hebt volgens mij de combinatie nodig.
Ook zou ik werken met
C#:
1
2
3
4
5
6
7
8
9
try {
//je code, wat je wilt bereiken hier
}
catch (Exception e) {
//maak de gebruiker duidelijk dat het niet lukt
}
finally {
//sluit de xml file stream
}

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • xyanide
  • Registratie: September 2006
  • Laatst online: 07:21
Heb het probleem inmiddels opgelost.
Elke keer wanneer ik data uit het xml bestand haal moet ik hem afsluiten met xr.Close();.

Het werkt nu perfect, schrijven en lezen.


Bedankt voor je suggestie, de try & catch had ik nog niet ingebouwd. Wou de boel eerst aan de praat krijgen :).

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik zou overigens gewoon gebruik maken van using statements voor resources die de IDisposable interface implementeren.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”