Frage zu "Pfade"

RudolfG

Erfahrenes Mitglied
Umlaute im Pfad (mit .NET Framework 2.0)

Hey Leute,

ich habe übungshalber ein "Memory"-Spiel-Programmiert, nachdem ich es etwas erweitert habe, habe ich dir Möglichkeit gegeben die Einstellungen in eine XML-Datei zu speichern und beim erneuten Start werden die Werte daraus gelesen. Die Datei liegt auch im App-Ordner und wenn nicht wir eine neue Datei mit den "Standardwerten" erstellt.

Das funktioniert auch super aber leider nur bei fasst allen Pfaden.

Wenn ich das Programm (ohne die XML-Datei) sagen wir mal auf den Desktop lege und von da starte bekomme ich die Meldung (die ich Programmiert habe) das die Datei neu angelegt wird und tatsächlich es funktioniert.

Wenn ich allerdings die Software in ein Verzeichnis schiebe das "ä", "ü" oder "ö" Ihn dem Pfad haben (z. B. C:\Eigene Dateien\User\C++ für Windows\) dann kommt zuerst die Meldung das die XML-Datei nicht gefunden wurde (auch wenn sie da ist) und neu erstellt wird, das einzige was mir daran auffällt das in der Fehlermeldung (siehe anhang1) das "ü" durch ein "Kästchen" ersetzt wurde, und dann wo das Programm die XML-Datei schreibt kommt eine Fehlermeldung siehe Anhang2. (die Fehlermeldung kommt auch wenn die XML-Datei in dem Verzeichnis existiert)

Gibt es da tricks bzw. tipps wie ich diesen Fehler ausbessern kann? Denn es sieht nicht gut aus wenn da diese Blödefehler kommen :(, ich kann mir kauf vorstellen das die Umlaute nicht unterstützt werden

Bin über jeden Tipp dankbar

Gruß
Rudolf Grauberger

PS: Ich habe es hierher gepostet da ich es mit C++/CLI und dem .NET Programmiert habe
 

Anhänge

  • anhang1.jpg
    anhang1.jpg
    11,3 KB · Aufrufe: 33
  • anhang2.PNG
    anhang2.PNG
    9,8 KB · Aufrufe: 31
Zuletzt bearbeitet:
Sieh dir mal bezüglich XML CDATA an. Das sollte dein Problem lösen.

Vielen Dank für den Hinweis :D

Leider weiß ich nicht genau wie ich das Anwenden bzw. einbinden soll :confused:

Mit folgender Anweisung "hole" ich den Pfad der Anwendung und hänge noch ein .XML dran:

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


die Variable xmlName enthält dann auch für das Öffnen etc. immer den Pfad der XML-Datei.

Wo kann/soll ich das jetzt Einbinden :confused:

Bitte um Hilfe, bin ein Totaler Anfänger was Datei/XML schreiben angeht. (und C++/CLI mach ich auch noch nicht lang)

Gruß
Rudolf Grauberger
 
Sieh dir mal bezüglich XML CDATA an. Das sollte dein Problem lösen.

Hey Norbert,

ich habe mir das mal angeguckt und ich habe das so verstanden wenn ich werte in die XML-Datei schreiben will die Umlaute enthalten (wie z. B. der Pfad), soll ich !CDATA davor schreiben dann wird genau der "Wert" gespeichert.

Es kann sein das ich es nicht ganz verstanden habe, da mein Englisch (und die Dokumentationen sind in Englisch) nicht so gut ist. (was ich hoffe noch ändern zu können).


Mein Problem ist das ich in die XML kein Pfad schreibe (zumindest sehe ich keinen), während der Konstruktor im Formular wird die Datei (ich ermittel den Pfad durch die im letzten Post enthaltene Anweisung) gelesen und wenn die nicht ganz ok ist oder nicht vorhanden ist wird eine Neue Datei angelegt.

Die XML-Datei sieht dann ungefähr so aus:
XML:
<?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>

Die Schreibfunktion/Methode sieht so aus:

C++:
        //Hier wird die Xml-Datei erstellt bzw. geschrieben
        void xmlErstellen()
        {
            //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();
        }

Ich hoffe mit diesen Infos könnt ihr mir besser Helfen.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hey Leute,

Habe das Problem selber bzw. durch meinen Tutor gefunden.

Das Problem ist das, dass das .NET Framework 2.0 kein Umlaute in dem Pfad unterstütz (mit dem neuen(?) Update zu 2.0 soll es auch schon gehen), das .NET Framework 3.5 schon.

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

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

Gruß
Rudi G
 
Zuletzt bearbeitet:
Zurück