Probleme mit "\" slashes im Pfad als String

Indian

Erfahrenes Mitglied
Hi

ich hab einen Problem mit der Pfad angabe um meine Bilder in einem Dialog zu laden. Der Pfad sollte 2 slashes enthalten z.B. "C:\\Bilder", Bilder werden einfach nicht geladen wenn ich nur ein slash "\" benutze. Wie kann ich einen Pfad z.B. "C:\Bilder" in "C:\\Bilder" umwandeln ?.

Irgendwie kann ich kein "\" als string oder char nutzen um denn Pfad zu manipulieren.

Hilfe
 
Der Grund ist der, das ein printf/sprintf/wsprintf Backslashes als Steuerzeichen sieht und das nächste Zeichen zu interpretieren versucht.

Du kannst dir das ganze Einfach-Backslashes-in-Doppel-Backslashes-Umwandeln sparen, indem du den printf/sprintf/wsprintf, der da irgendwo drin ist, durch was anderes ersetzt (oder gleich std::string, HintHintNudgeNudge).
 
ich benutze kein sprintf sondern. Ich möchte nur denn String umwandeln

das hier geht nicht
m_PicturePath.SetAt(3,"\");

wie kann ich das realisieren und in einem String ein weiteres Slash einfügen ?
 
einfach anstatt "\" "\\" eingeben.
also
m_PicturePath.SetAt(3,"\\")

Wenn du z.B "\\" einsetzen willst must du eben "\\\\" eingeben
Also für jeden Backslash den du machen willst immer 2 einsetzen
 
SetAt erwartet eine char als Paramter
Also nicht "\\" sondern '\\' verwenden.
Das überschreibt dir aber das Zeichen an dieser Position.
Du willst ein Einfügen des Zeichens:
m_picturePath = m_picturePath.Left(3) + CString('\\') + m_picturePath.Mid(3);
 
Wenn du alle Backslahes ersetzen willst, nimmst du am besten die Replacxe Methode von CString.
m_picturePath.Replace("\\", "\\\\");
 
hab das schon versucht z.B.

IniFile.SetPathName(m_IniFilePath);
m_IniFilePath.Replace("\","\\");

bekomme leider immer ne Fehlermeldung die folgendermassen lautet. Ich finde das ÄUSSERST komisch

Code:
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\ConfigDlg.cpp(58): warning C4129: 'K' : Nicht erkannte Folge von Escape-Zeichen
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\InventoryDlg.cpp(53): warning C4129: 'K' : Nicht erkannte Folge von Escape-Zeichen
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\InventoryDlg.cpp(57): error C2661: 'ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >::Replace' : Keine überladene Funktion akzeptiert 1 Parameter
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\InventoryDlg.cpp(57): error C2146: Syntaxfehler : Fehlendes ')' vor Bezeichner 'm_PicturePath'
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\InventoryDlg.cpp(55): error C2017: Ungültige ESCAPE-Sequenz
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\InventoryDlg.cpp(55): error C2017: Ungültige ESCAPE-Sequenz
c:\Dokumente und Einstellungen\Mother\Eigene Dateien\Visual Studio-Projekte\Kasse\Kasse\InventoryDlg.cpp(55): error C2001: Zeilenumbruch innerhalb einer Konstanten



Ein slash wird als Esc-Sequenz bewertet und ich muss ja nur 1 slash ersetzen, wie zum Teufel soll ich das machen wenn der Compiler mir das ja nicht mal erlaubt. Ich ermittle denn Pfad mit LPITEMIDLIST pidl=SHBrowseForFolder(&bi), welcher eine arte open file dialog für pfad öffnet, jedoch mir nur denn Pfad mit jeweils nur einen slash zurückliefert.
 
Zuletzt bearbeitet:
Deshalb must du, wenn du einen Slash machen willst 2 eingeben
Das erste wird als Steuerzeichen bewertet und das zweite dann als slash.
 
Der Parser deines Compilers interpretiert diese Zeichenketten. Und wenn er ein \ innerhalb eines Strings findet, dann nimmt er an, das Escape Zeichen + das nächste Zeichen ist ein Steuercode.
z.B. "\n" = New line
Im erzeugten Binärcode steht dann trotzdem nur ein Zeichen drin nämlich das New Line (Hex = 0x0a = Dezimal 10)
Das gleiche gilt für das Escape Zeichen selbst. '\\' = Hex 0x5c = Dezimal 92
Und für 2 Escapezeichen in Binär brauchst du eben vier Escape Zeichen bei der Eingabe in deinem Editor. "\\\\" = im erzeugten Binärcode: Hex 5c5c = 2 Zeichen

Und wenn du jetzt nur ein Escapezeichen in deinem Editor eingibst und zusammen mit dem folgenden Zeichen ergibt sich kein gültiges Sonderzeichen, dann erhältst du eine Fehlermeldung.
In deinem Fall fehlt das schliessende ", da er \" als Dezimal 34 ansieht, und der String ist noch nicht geschlossen.

Gruss
Dora
 
Zurück