Entwickler-Ecke
Windows API - Wie Finde ich das Verzeichnis der Anwendung?
msphp - Mi 16.02.05 14:10
Titel: Wie Finde ich das Verzeichnis der Anwendung?
Hallo
Also Mein Problem: Ich schreibe ein Programm das auf eine CD kommt, und ich darum nicht wissen kann, wie der Pfad zum Ordner heisst, in dem Meine Anwendung sich befindet.
Nun sollte ich auf einige andere Ordner Zugreifen. Etwa ein solches Verzeichnis ..\Player (also ein Ordner im übergeordneten Ordner) und dort suche ich dann einfach alle Dateien zusammen mit FindFirst, aber dem muss ich ja den Ordnepfad angeben. Mit relativen pfaden klappt das nicht und auch der momentan gesetzte pfad zeigt nicht auf mein programm-Verzeichnis sondern auf den Desktop (wiso auch immer)
Hat jemand eine Ahnung wie ich den Pfad für das Verzeichnis Finde, in dem sich meine Anwendung befindet?
Vielen Dank
Michael
raziel - Mi 16.02.05 14:13
Damit:
Delphi-Quelltext
1:
| ExtractFilePath(ParamStr(0)); |
Gruß,
raziel
Gausi - Mi 16.02.05 14:14
Den Dateinamen der Exe findet man z.B. über Application.exename;
Edit: Mist, da war einer schneller...
raziel - Mi 16.02.05 14:17
| Gausi hat folgendes geschrieben: |
| Den Dateinamen der Exe findet man z.B. über Application.exename; |
Darüber ließe sich jetzt streiten, aber bevorzugen würde ich
ParamStr(0), einfach deshalb, weil nicht immer eine Instanz des Application-Objekts existiert, z.B. in einer Konsolenanwendung ;)
| Gausi hat folgendes geschrieben: |
| Edit: Mist, da war einer schneller... |
:P ;)
Gruß,
raziel
Martin77 - Mi 16.02.05 14:34
Undmein Senf dann auch noch dazu ;)
Ich fand Application.Exename immer spitze, bis Ich zu einigen GUI Tools das entsprechende Kommandozeilen Tool bauen mußte ;) Aber wie war das:
Egal welche Möglichkeit du verwendest: Achte darauf das es an einer, und nur an einer Stelle steht ;)
Maritn
Ja Ich weiss etwas OffTopic ;)
msphp - Mi 16.02.05 18:39
Vielen Dank! Funktioniert hervorragend :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var ProgLocation:String; SR: TSearchRecord;
procedure TForm1.FormCreate(Sender: TObject); begin ProgLocation:=ParamStr(0); end;
findfirst(ExtractFileDir(ProgLocation)+'\..\player\*.*',faAnyFile,SR); |
Ich habe ParamStr(0) verwendet und funktioniert problemlos.
Habe mir den Tip zu Herzen genommen und lese den Wert nur einmal (onCreate) aus und benutze dann die Variable
Nochmals vielen Dank an Raziel Gausi und Martin77
Schönen tag noch
Michael
StefanH - Mi 16.02.05 18:51
btw: wieso speicherst du nicht gleich das Ergebnis von ExtractFilePath in deine Variable? brauchst du irgendwo den ganzen Pfad?
@Martin77: wieso soll es nur an einer Stelle stehen?
msphp - Mi 16.02.05 19:02
Ja stimmt eigentlich. Hab nicht so viel dabei gedacht :roll: , ging n bischen schnell
schönere Version wäre:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var ProgLocation:String; SR: TSearchRecord;
procedure TForm1.FormCreate(Sender: TObject); begin ProgLocation:=ExtractFileDir(ParamStr(0)); end;
findfirst(ProgLocation+'\..\player\*.*',faAnyFile,SR); |
Danke für den Hinweis
{Wiso einfach, wenn es auch kompliziert geht? :angel: }
Martin77 - Mi 16.02.05 20:07
| StefanH hat folgendes geschrieben: |
@Martin77: wieso soll es nur an einer Stelle stehen? |
Naja, ich habe die Erfahrung gemacht das eine ToolsUnit sehr hilfreich sein kann. So wirklich allgemeine Funktionen.
1. Stell dir vor du hast eine Klasse und brauchst an 20 Stellen das ExeVerzeichnis. So, irgendwann bauste aus dem GUI Programm ein Kommandozeilenprogramm, also 20 mal Application.exename durch Paramstr(0) ersetzen? Herzlichen Glückwunsch.
2. Der 1. Schritt ist die geglückt, 2 Tage später überlegst du dir : Hey, ich hab da noch nenTool, also nochmal 20 mal nen Replace
Ja, ich weiss übertrieben. In meiner ToolsUnit gibt es viele schöne kleine Funktionen die einem das leben erleichtern (z.B. Dateisuche, packen/entpacken von Streams,....) und halt auch eine GetExeDir die mir das Exe Verzeichnis liefert. Somit steht es doch für dich nur an einer Stelle. Wenn Du nen Einkaufszettel schreiben sollst. wirst du ja auch nicht für jede Sache die du kaufen willst nen eigenen Block nehmen, oder? ;)
Mehr wollteIch eigentlich auch nicht gesagt haben ;)
StefanH - Mi 16.02.05 21:21
| Martin77 hat folgendes geschrieben: |
| StefanH hat folgendes geschrieben: |
@Martin77: wieso soll es nur an einer Stelle stehen? |
1. Stell dir vor du hast eine Klasse und brauchst an 20 Stellen das ExeVerzeichnis. So, irgendwann bauste aus dem GUI Programm ein Kommandozeilenprogramm, also 20 mal Application.exename durch Paramstr(0) ersetzen? Herzlichen Glückwunsch. |
dieses Problem stellt sich für mich nicht, da ich sowieso nur mit ParamStr(0) arbeite :)
und außerdem hat Delphi diese Tolle Ersetz-Funktion :mrgreen:
Martin77 - Mi 16.02.05 23:37
Hey Stefan, dann ist ok ;) Sollte auch eher für msphp sein.
Kann mich an nen Kollegen erinnern, sein Lieblingsspruch war echt "Egal wo es steht, hauptsache nur an einer Stelle" Manchmal echt nervig, aber recht hat er :D
Aber ich glaube wir schweifen vom Thema ab :D
Kedariodakon - Mi 02.03.05 20:58
| raziel hat folgendes geschrieben: |
| Gausi hat folgendes geschrieben: | | Den Dateinamen der Exe findet man z.B. über Application.exename; |
Darüber ließe sich jetzt streiten, aber bevorzugen würde ich ParamStr(0), einfach deshalb, weil nicht immer eine Instanz des Application-Objekts existiert, z.B. in einer Konsolenanwendung ;) |
Uses Forms; :wink:
Bye
tommie-lie - Mi 02.03.05 21:07
| Kedariodakon hat folgendes geschrieben: |
| raziel hat folgendes geschrieben: | | weil nicht immer eine Instanz des Application-Objekts existiert, z.B. in einer Konsolenanwendung ;) | Uses Forms; :wink: |
Geil, und nur dafür extra den 320kb-Overhead für Forms in Kauf nehmen, wo doch Application.GetExeName() selbst nichts anderes macht als ParamStr(0) zurückzugeben? Auch 'ne Möglichkeit, die EXE mit minimalem Aufand um 900% zu vergrößern...
(Vergleich: leere Konsolenanwendung (nur SysUtils eingebunden), D6 -> 38400 Bytes; gleiche Anwendung mit Forms: 356352 Bytes)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!