C# Programmabsturz bei XMLDocument.Save ohne Meldung

Registriert
Mai 2007
Beiträge
150
Hallo,

Ich habe hiermit ein Problem:

Code:
                XmlDocument doc = new XmlDocument();
                doc.Load("base\\sender.xml");
                XmlElement root = doc.DocumentElement;

                foreach (XmlNode article in root.ChildNodes)
                {
                    if (article["id"].InnerText.Equals(s.id.ToString()))
                    {
                        root.RemoveChild(article);
                        break;
                    }
                }
                try
                {
                    doc.Save("base\\sender.xml");
                }
                catch (Exception j)
                {
                    MainForm.mbox(j.ToString());
                }

Bei doc.Save("base\\sender.xml"); beendet sich das Programm ohne Meldung, auch der catch-Block wird nicht ausgelöst. Wie kann das sein? Ich bin mir sicher, das das Programm hier abstürzt, ich habe die Stelle durchgesteppt. Die Datei base/sender.xml ist danach komplett leer.

Hat jemand eine Idee?

lg Stefan
 
Was ist wenn du es so ausprobierst?
Code:
                XmlDocument doc = new XmlDocument();
                doc.Load("base\\sender.xml");
                XmlElement root = doc.DocumentElement;

                XmlNode nodeToRemove = null;
                foreach (XmlNode article in root.ChildNodes)
                {
                    if (article["id"].InnerText.Equals(s.id.ToString()))
                    {
                        nodeToRemove = article;
                        break;
                    }
                }
                if (nodeToRemove != null) {
                     root.RemoveChild(nodeToRemove);
                }
                try
                {
                    doc.Save("base\\sender.xml");
                }
                catch (Exception j)
                {
                    MainForm.mbox(j.ToString());
                }

Was ist, wenn du es mal unter einem anderen Dateinamen speicherst?
 
1668mib schrieb:
Was ist wenn du es so ausprobierst?
[...]
Was ist, wenn du es mal unter einem anderen Dateinamen speicherst?

Werde ich morgen mal ausprobieren, aber es tut doch dasselbe, oder?
Der Dateiname ist wichtig, die Datei soll ja überschrieben werden.

Die Datei ist übrigens nur wenige kb gross.
 
Ehrlich gesagt glaube ich nicht dass irgendwas von dem was ich gesagt habe ans Ziel führt, aber dummerweise sollte man bei so Problemen auch die irgendwie unwahrscheinlich aussehenden Dinge testen...
 
Abbruch des Codes wird meist von den Nebenläfigen Threads verursacht. Du kannst in der VS einstellen, dass es bei jedem Exception anhalten soll, dann weißt du es genau wo das Passiert!

MfG

roker002
 
Wie genau geht das?

Aber eigendlich weiss ich ja schon, das es bei doc.Save("base\\sender.xml"); passiert, ich weiss nur nicht warum, da ich keine Exception bekomme.
 
Deine Exception wird nicht gefangen, weil sie höchstwahrscheinlich gar nicht im try-block geworfen wird.

Code:
article["id"].InnerText

Ich vermute eher, dass hier dein Problem liegt. Wenn der aktuelle article keine Node mit Namen id hat wird eine NullReferenceException geworfen, sobald du auf das InnerText Property zugreifst.

edit.
Vergiss, was ich da oben geschrieben habe. Kann offensichtlich nicht richtig lesen (durchgesteppt und so :))

edit2.
Zu deiner Frage bzgl. Exceptions.

1. Debug -> Exceptions -> Common Language Runtime Exceptions
Hier die entsprechenden Exceptions markieren

2. Tools -> Options -> Debugging -> General
Enable the exception assistant aktivieren
 
Zuletzt bearbeitet:
Code:
1. Debug -> Exceptions -> Common Language Runtime Exceptions
 Hier die entsprechenden Exceptions markieren

 2. Tools -> Options -> Debugging -> General
 Enable the exception assistant aktivieren

Vielen Dank, hat geholfen! Die Exception ist tatsächlich an einer anderen Stelle ausgelöst worden, aber halt zeitgleich mit dem doc.Save.

Danke ;-)
 
Zurück
Oben