Einfacher Backslash in CString



  • Hallo,

    ich muss einen Pfad der aus einem Dialogfeld zurückgegeben wird an ein Powershell-Skript übergeben. Aktuell hat der Pfa den Aufbau D:\\Verzeichnis\\Verzeichnis\\Datei.xxx und wird in einem CString gespeichert. Jetzt muss ich für das Skript alle doppelten Backslashs gegen einfache ersetzen. Replace und irgendwas mit Find und Delete funktionieren nicht. Oft hat man eher das andere Problem das man einfache gegen doppelte Backslashs austauschen muss was ja sehr gut mit CString.Replace(_T("\"), _T("\\"). Ich brauche jedoch die Umkehrung. Wie kann man das realisieren? CString..Replace(_T("\\"), _T("\")) funktioniert schon mal nicht.



  • "Funktioniert nicht" ist keine Fehlerbeschreibung.

    Warum sollten in dem Pfad doppelte Backslash stehen?



  • Oh man, ich hatte gerade eine übelsten Denkfehler. Backslashes werden ja als \\ in einem CString abgespeichert. Daher sind auch Pfadangaben immer in der Form D:\\Verzeichnis\\Verzeichnis\\Datei.xxx wenn man im Debugger schaut. Wenn man das dann aber in eine Textdatei schreibt und die im Editor öffnet steht das wieder ganz normal mit D:\Verzeichnis\Verzeichnis\Datei.xxx drin.



  • Im CString selbst steht ein einfacher \.
    Im Debugger wird "\\" angezeigt, weil der Debugger dir den String so zeigt wie du ihn in C++ hinschreiben müsstest. Und in C++ musst du halt in "\\" schreiben wenn du einen String mit einem einfachen \ haben willst.

    Und noch eine Bitte: Wenn du Backslashes in Beiträgen verwendest, verwende bitte Code-Tags (inline oder multi-line, je nachdem was besser passt). Wenn du nämlich einen doppelten Backslash einfach nur so in den Text reinschreibst ala foo\bar, dann zeigt das Forum nur einen an. Wie man hier ja auch schön sieht.

    Für Leute die dir helfen wollen ist das dann schlecht, weil die sich dann nie sicher sein können ob du jetzt wirklich foo\bar schreiben wolltest, oder ob du foo\\bar schreiben wolltest und bloss nicht bemerkt hast dass das Forum halt foo\bar daraus macht.



  • Windows versteht auch den einfach Slash in Pfadnamen.



  • @hustbaer Vielen Dank für den Hinweis. Hab es gleich geändert. Ist klar was du meinst, da man ja nicht das lesen kann was der andere ausdrücken wollte.



  • @AndyDD sagte in Einfacher Backslash in CString:

    Hab es gleich geändert.

    Wo?
    Ich sehe immer noch keine Code-Tags. Ich meine... gibt jetzt schlimmeres, und nachdem du dein Problem ja gelöst hast ist es auch nicht mehr besonders wichtig diesen Thread noch zu ändern. Ich frag bloss weil du schreibst du hättest es geändert. D.h. ich vermute ... vielleicht hast du mich falsch verstanden 🙂



  • @hustbaer Ich habe keine Code-Tags verwendet weil ich auch keinen Code gepostet habe. Ich habe es aber editiert, da das was vorher das stand Quatsch war (wie du ja bemerkt hattest).



  • Ich meine inline code tags.
    Die sind nicht nur nützlich wenn man Code postet, sondern auch wenn man Codeschnippsel postet, bzw. allgemein Dinge wo man möchte dass der Markdown-Renderer nicht dazwischenfunkt.

    z.B.

    @AndyDD sagte in Einfacher Backslash in CString:

    Oft hat man eher das andere Problem das man einfache gegen doppelte Backslashs austauschen muss was ja sehr gut mit CString.Replace(_T("\"), _T("\\").

    Da ist einfach nicht klar was du meinst.
    Du könntest Replace(_T("\\"), _T("\\\\") meinen (was funktioniert) oder halt auch Replace(_T("\"), _T("\\") so wie es das Forum anzeigt (was Quatsch wäre).

    (Gut, genaugenommen ist beides Quatsch weil eine schliessende Klammer fehlt. Aber das ist ein Fehler wo sich wohl kaum jemand ernsthaft fragen wird was du jetzt gemeint hast. Es ist klar dass du die Klammer einfach vergessen hast. Bei den Backslaches ist es dagegen nicht klar.)

    Also sobald irgendwo Zeichen wichtig sind die in Markdown zur Formatierung bzw. als Escape-Zeichen verwendet werden, lieber inline Code Tags verwenden.



  • @hustbaer Alles klar. Danke für den Hinweis. Jetzt hab ich auch rausgefunden wie man Ich meine inline code tags macht.



  • Tip: Wenn du was im Forum siehst wo du nicht weisst wie man es schreibt, einfach beim Beitrag auf "zitieren" drücken - dann siehst du im Editor wie der "Source" Text dazu ist.



  • @hustbaer 😆 , so hab ich das auch gemacht. Ist mir vorher gar nicht so aufgefallen, da ich meist nur Quelltext poste und da weiß, wie es geht. Ich finde es aber gut, dass hier so unkompliziert geholfen wird. Vielen Dank.


Log in to reply