Pfadfehler :confused:



  • Hey Leute,

    ich habe ein Problem und hoffe das einer von euch mir hier helfen kann!

    Ich habe eine Programm geschrieben und speichere dabei die vom User vorgenommene Einstellungen in eine XML Datei die im selben Pfad liegt wie die .exe (sie trägt auch den namen der .exe nur das die Endung .xml ist)

    Wenn die Datei (.xml) in dem Application::Pfad liegt dann wird versucht die Einzulesen, bei Fehler kommt genau wie bei nicht vorhanden der Datei eine Meldung das die XML-Datei mit Standardwerten neu erstellt wird.

    Das funktioniert auch (fast) immer!

    Wenn im Pfad Umlaute vorkommen kommt folgende Meldung (das die xml-Datei nicht vorhanden ist und neu angelegt wird), und das egal ob in dem selben Verzeichnis der exe-Datei die xml datei liegt oder nicht. Das einzige besondere ist (wie auch auf dem Bild zu sehen) das anstelle des Umlauts ein "Kästchen" steht.

    Wenn ich jetzt auf OK klicke wir durch folgende Methode die XML-Datei neu geschrieben bzw. es wird versucht!

    //die Einstellungen setzten
    			XmlWriterSettings ^einstellungen = gcnew XmlWriterSettings;
    			einstellungen->Indent = true;
    			//Die Datei erzeugen
    			XmlWriter ^xmlSchreiben = XmlWriter::Create(xmlName, einstellungen);
    			//Die Deklaration schreiben
    			xmlSchreiben->WriteStartDocument();
    			//Die Wurzel schreiben
    			xmlSchreiben->WriteStartElement("einstellungen");
    			//Das Unterelement werte schreiben
    			xmlSchreiben->WriteStartElement("werte");
    			//Die Einträge schreiben
    			xmlSchreiben->WriteElementString("schwierigkeit", Convert::ToString(schwierigkeit));
    			xmlSchreiben->WriteElementString("intervall", Convert::ToString(intervall));
    			//das Elment werte schließen
    			xmlSchreiben->WriteEndElement();
    			//Die Wurzel schreiben
    			xmlSchreiben->WriteStartElement("save");
    			//Den Eintrag schreiben
    			xmlSchreiben->WriteElementString("bool", Convert::ToString(speichern));
    			//das Element save schließen
    			xmlSchreiben->WriteEndElement();
    			//Die Wurzel schreiben
    			xmlSchreiben->WriteStartElement("spieler");
    			//Die Einträge schreiben
    			xmlSchreiben->WriteElementString("spieler1", Convert::ToString(spieler1));
    			xmlSchreiben->WriteElementString("spieler2", Convert::ToString(spieler2));
    			//Das Element spieler schließen
    			xmlSchreiben->WriteEndElement();
    			//Die Wurzel schreiben
    			xmlSchreiben->WriteStartElement("gegner");
    			//Den Eintrag schreiben
    			xmlSchreiben->WriteElementString("mvsM", Convert::ToString(mvsM));
    			//Das Element gegner schließen
    			xmlSchreiben->WriteEndElement();
    			//Die Wurzel schreiben
    			xmlSchreiben->WriteStartElement("statusbar");
    			//Das Element schreiben
    			xmlSchreiben->WriteElementString("sleiste", Convert::ToString(statusleiste));
    			//das Schreiben abschließen , offene Tags werden automatisch geschlossen
    			xmlSchreiben->WriteEndDocument();
    			//Die Datei schließen
    			xmlSchreiben->Close();
    

    Die Variable xmlName wird folgendermassen definiert:

    String ^xmlName;
    xmlName = IO::Path::ChangeExtension(Application::ExecutablePath, ".xml");
    

    Die XML-Datei hat z. B. folgenden Inhalt: (der Inhalt ist immer der Gleiche)

    <?xml version="1.0" encoding="utf-8"?>
    <einstellungen>
        <werte>
              <schwierigkeit>0</schwierigkeit>
              <intervall>1000</intervall>
        </werte>
        <save>
              <bool>True</bool>
        </save>
        <spieler>
              <spieler1>Raudi</spieler1>
              <spieler2>Computer</spieler2>
        </spieler>
        <gegner>
              <mvsM>False</mvsM>
        </gegner>
        <statusbar>
              <sleiste>True</sleiste>
        </statusbar>
    </einstellungen>
    

    Das Programm bleibt bei dem Versuch die XML-Datei zu schreiben hängen und kurze Zeit später kommt diese Fehlermeldung.

    Ich nehme mal an das das der Grund für das Abstürzen die Umlaute sind bzw. das Kästchen.

    Bitte um Antworten da ich schon total am Ende bin (google etc. habe ich schon benutzt)

    Gruß
    Rudi G

    PS: Das hat hier nichts mit CDATA etc. zu tuen da ich den Pfad mit Umlauten ja nicht in die XML-Datei schreiben will, sondern währen der Laufzeit auf ein Verzeichnis zugreifen will/muss das Umlaute im Namen hat!



  • Habe den "Fehler" selber bzw. durch meinen Tutor gefunden.

    Der Fehler ist der, dass das .NET Framework 2.0 kein Umlaute in dem Pfad unterstütz (mit dem Service Pack 1 zum .NET Framework 2.0 funktioniert das auch, aber nur unter XP,) für Visat muss das .NET Framework 3.5 installiert werden.

    Ich habe das Framework 3.5 installiert und jetzt funktioniert es perfekt.

    Vielen Dank an alle, die sich überhaupt das durchgelesen und Gedanken dazu gemacht haben!

    Gruß
    Rudi G


Anmelden zum Antworten