"Open with" vs. "File Open"



  • wenn ich einen filenamen per "Open With" aus dem explorer an meine anwendung übergebe, ist dieser immer in "..." eingebettet - ganz im gegensatz zum filenamen, den ich aus einem file-open dialog aus meiner anwendung bekomme - hier bekomme ich den namen ohne ""

    ist das immer so ? ist das eine einstellungssache ? hat das irgendwelche vorteile ? warum der unterschied ?

    danke für hinweise ... RockNix ///



  • Sind evtl. im Dateinamen irgendwelche Leerzeichen enthalten?
    Oder ist das generell so?



  • hmm, das scheint immer so zu sein, ob mit oder ohne leerzeichen im namen. kann es allerdings nur auf win2k testen.

    rocknix ///



  • Das macht man, wie von Hepi gesagt, um Problemen mit Leerzeichen in Pfaden aus dem Wege zu gehen. Für das normale Öffnen kann man das beeinflussen, indem man in der Registry das %1 in "%1" ändert.

    Von GetOpenFileName hingegen bekommst Du den Namen immer ohne Anführungszeichen. Es kann sich auch nur um eine Datei handeln, Parameter müssen nicht noch extrahiert werden.

    Dank PathUnquoteSpaces ist das aber alles kein Problem. Sind keine Anführungszeichen vorhanden, passiert nichts. Ansonsten werden sie entfernt.



  • Das ist immer so.
    Wenn man beispielsweise in registry ne Endung ".bla" anlegt und als default-command "c:\dein\programm.exe %1" anlegt, dann via Explorer ne .bla-Datei öffnen will, dessen Pfad Leerzeichen enthält (z.B. "c:\dokumente und einstellungen\User1\test.bla"), wird in deinem Programm nur "c:\dokumente" ankommen.
    Wenn man in registry aber
    c:\dein\programm.exe "%1"
    anlegt, kommt der komplette Pfad an. Windows trennt ohne Anführungszeichen also bei Leerzeichen ab.
    Warum das so sein muss: k.A.
    Kann man aber auf jedenfall nich irgendwo einstellen - Aber Anführungszeichen kannste ja ohne Probleme aus dem Dateinamen rausschneiden, Anführungszeichen können in nem normalen Dateinamen eh nich vorkommen 😃

    ...mal wieder zu langsam gewesen 😉



  • BTW: Eine sehr schöne Erklärung findet sich in der Hilfe zu CreateProcess:

    MSDN schrieb:

    If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin; otherwise, the file name is ambiguous. For example, consider the string "c:\program files\sub dir\program name". This string can be interpreted in a number of ways. The system tries to interpret the possibilities in the following order:

    c:\program.exe files\sub dir\program name
    c:\program files\sub.exe dir\program name
    c:\program files\sub dir\program.exe name
    c:\program files\sub dir\program name.exe



  • Dank PathUnquoteSpaces ist das aber alles kein Problem. Sind keine Anführungszeichen vorhanden, passiert nichts. Ansonsten werden sie entfernt.

    genau das hatte ich gesucht, danke ...


Log in to reply