Dateipfad aus OpenDialog mit ShellExecute ausführen



  • Hallo zusammen!

    Ich lese mit einem OpenDialog eine exe-Datei ein und speichere den Pfad in einem AnsiString. Dann möchte ich diese Datei mit ShellExecute (und ein paar Startparametern) starten.

    AnsiString str_ExePfad = OpenDialog1->FileName;
    AnsiString str_Startparameter = "\a \b \c"; //werden eigentlich aus einem Edit-Feld ausgelesen!
    

    Jetzt hab ich das Problem, dass in "str_ExePfad" sowas steht "C:\Ordner\Datei.exe" ich aber sowas ""C:\\Ordner\\Datei.exe"" brauche.

    ShellExecute(0, "open", str_ExePfad.c_str(), str_Startparameter.c_str(), 0, SW_SHOWNORMAL);
    

    Die Frage ist, ob ich nun programmieren muss, dass vor Anführungszeichen und Backslashs noch ein Backslash eingefügt wird, damit die Pfade richtig erkannt werden, oder geht das auch einfacher?

    Viele Grüße,
    Pfanne



  • Hallo

    Warum brauchst du doppelte Backslashes? Nur wenn du direkt im Quellcode in String-Literalen Backslashes schreibst must du verdoppeln, ansonsten nicht.

    bis bald
    akari



  • pfanne23 schrieb:

    Jetzt hab ich das Problem, dass in "str_ExePfad" sowas steht "C:\Ordner\Datei.exe" ich aber sowas ""C:\\Ordner\\Datei.exe"" brauche

    Wieso 😕

    LG

    // Menno zu spät...



  • Stichwort Escape-Sequenzen;

    Die Frage ist, wie Du Dir den Pfad hast anzeigen lassen: mittels Debugger im BCB wird ein doppelter Backslash angezeigt; während der Laufzeit Ausgabe durch z.B. eine MessageBox, dann einzelne Backslashs als Ordner-Trenner.

    Wenn Du aber auf OpenDialog::FileName zugreifst, dann ist der Pfad bereits korrekt mit zwei Backslashs escaped; Antwort auf Deine Frage: Nein.

    // zu spät



  • Hallo

    Wenn Du aber auf OpenDialog::FileName zugreifst, dann ist der Pfad bereits korrekt mit zwei Backslashs escaped; Antwort auf Deine Frage: Nein.

    Nein, eben nicht. Ein Backslash ist genau ein Zeichen, auch in Pfadangaben. Zur Laufzeit hat der String "a\\b" genau drei Zeichen und wird auch korrekt ausgegeben. Der Debugger verdoppelt zur Ausgabe die Backslashes wieder, um die Anzeige an den Quellcode anzugleichen.
    Man muß nur escapen, wenn man in Quellcode einen Text packen will, der eventuell Zeichen beinhalten, die normaleweise in der Syntax des Quellcode eine bestimmte bedeutung haben und die vom Parser dann mißverstanden werden würden. Zum Beispiel der Backslash in C/C++. Zur Laufzeit aber spielt diese Verdopplung keine Rolle mehr, nach dem Compiler ist davon nichts mehr im Programm.

    bis bald
    akari



  • stimmt, hast Recht; ist etwas blöd formuliert.



  • Puh, hier hat sich ja schnell viel getan.
    Ach so ist das! Alles klar, (richtigen) Fehler gefunden und wieder was gelernt!
    Vielen Dank und bis bald!


Anmelden zum Antworten