ExtractFilePath( Application->ExeName )



  • sorry, aber ihr redet irgendwie an mir vorbei.

    das ganze funktioniert schon, ich bekomme auch den korrekte Pfad, nur sieht es nicht gut aus, wenn zum Beispiel oben dann im Programmkopf statt C:\Programmpfad\Dateien\test.TXT folgendes steht: C:\PROGRAMMPFAD\DATEIEN\TEST.TXT ... was muss ich ändern, damit alles so angezeigt wie es auch wirklich ist, denn es heißt nunmal nicht "PROGRAMMPFAD" sondern "Programmpfad"

    HILFE.

    Tipp: Lasst euch mittels MessageDlg mal ExtractFilePath( ParamStr( 0 ) ) ausgeben, das ganze wird in großbuchstaben wie eben im problem bei mir erscheinen - leider!



  • @Junix

    Dann informiere Dich mal, wo ParamStr(0) im BCB und argv[0] in C / C++
    ihren Inhalt her haben (DARUM ging's, aber Du kannst wohl nicht lesen?)

    Der Inhalt kommt vielleicht vom OS? 😃



  • @C++

    Dein Problem kann ich nicht nachvollziehen:

    Bei mir kommt die Angabe so, wie Ordner heisen (Originalschreibweise!) 😕 😕 😕

    Hab' den BCB 4.0!



  • Ist mir wurscht wo er bei ParamStr(0) die daten her holt.

    In meiner Hilfe steht dazu:

    ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE)

    Ich vermute auch, dass ParamStr() nicht einfach auch argv zurückgreift sondern das irgendwie anderweitig auswertet. Aber das ist spekulation...

    -junix



  • Bei mir GEHTS HALT NICHT mit der richtigen Schreiweise. Die Frage war auch von grund auf so ausgelegt, dass ich einfach nur gern die Lösung hätte. Da ExtractFilePath ja nicht geht, fällt das weg. Bitte, bitte diskutiert über mein Problem und nicht über Sekundäres bezüglich dieses Themas.



  • Hast du beim explorer irgendwo ein häckchen gesetzt dass er die Ordnerangaben irgendwie umformatieren soll? (alles klein, alles gross, erster buchstabe gross, oder so?) Erstell mal nen neuen ordner mit bewusster Gross/Kleinschreibung und kopier deine Anwendung aus...

    -junix



  • @C++: ...Ich kann das Problem teilweise nachvollziehen...
    Bei mir(hab das schnell mal ausprobiert) zeigt er das Laufwerk und die ersten zwei ordner nur kleingeschrieben an(obwohl Großschreibung im korrekten Ordnernamen), die danach korrekt...

    Naja... Wer weiß, ob das jetzt eine eigenart des Builders ist... Der hat ja manchmal doch recht unterschiedliche Launen 😉

    ...mysteriös...



  • @C++

    Dein Problem ist mysteriös!? 😕

    Aber Du kannst mal mit WinAPI probieren:

    char MFN[255];
    GetModuleFileName(0,MFN,sizeof(MFN)); //holt Namen des Programms (Modul) 😉
    Label1->Caption=MFN;
    (Puffer MFN muss genug Platz haben!)

    Sag mal, was das bringt.
    🙄

    [ Dieser Beitrag wurde am 05.03.2003 um 18:03 Uhr von DerAltenburger editiert. ]



  • Hast du schon versucht mit FindFirst() (und dem Grossbuchstabennamen als Maske) den echten Dateinamen zu lesen?



  • AnsiString fileName = FindFirst( ParamStr( 0 ), faAnyFile, sr );

    fileName hat dann leider den Wert 0 😞 !



  • Benutzt du Win9x? Wenn ja, hast du das Programm mal auf einem NT/2K/XP-Rechner getestet?



  • @C++, wenn alle Stricke reißen, könntest Du dein Glück auch mit GetCommandLine() versuchen. Ich verwende es gern, weil es immer geht. Das macht auch bei URLs nicht schlapp, die Fragezeichen enthalten. Das ist bei dir jetzt nicht relevant. Aber wenn ParamStr(0) bei dir aus welchen Gründen auch immer streikt... Hier (WIN98) zeigen beide Wege den String so an, wie er auch im Filemanager erscheint.



  • AnsiString fileName = FindFirst( ParamStr( 0 ), faAnyFile, sr );

    Das kannst du ja wohl kaum wirklich ausprobiert haben. FindFirst liefert einen int zurück, keinen String. Der Filename steht in sr.Name.



  • Was geo eigentlich sagen wollte ist: RTFM! Die Doku ist zum lesen da also tu es. Nicht einfach nur BastelProgrammierung betreiben. (Es funktioniert... aber keiner weiss wieso)

    -junix



  • Nein, es besteht (hier, WIN98) ein totaler Unterschied! Hatte bei der kurzen Verwendung von ParamStr(0) wohl nur nicht drauf geachtet. Sorry, dicker Fehler, er gemahnt mich zu wesentlich mehr Sorgfalt. 🙄

    void __fastcall TEditor::FormShow(TObject *Sender)
    {
     ShowMessage(ParamStr(0));
     ShowMessage(GetCommandLine());
    }
    

    Ich denke, das Ergebnis dieses simplen Versuches spricht für sich. Erhaltet ihr wirklich 2 identische Messages? Ich könnte ParamStr(0) jedenfalls nur noch für ganz spezielle Einsatzzwecke empfehlen.



  • Nur zur Info: Ich hab mal im Delphi-Code nachgeschaut. Dabei kam heraus, dass ParamStr(0) über GetModuleFileName(NULL,...) läuft.


Anmelden zum Antworten