| Autor |
Beitrag |
msphp
      
Beiträge: 20
WIN 2000
D6 Pers
|
Verfasst: Mi 16.02.05 14:10
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
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mi 16.02.05 14:13
Damit:
Delphi-Quelltext 1:
| ExtractFilePath(ParamStr(0)); |
Gruß,
raziel
_________________ JSXGraph
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 16.02.05 14:14
Den Dateinamen der Exe findet man z.B. über Application.exename;
Edit: Mist, da war einer schneller...
_________________ We are, we were and will not be.
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: 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... |
Gruß,
raziel
_________________ JSXGraph
|
|
Martin77
      
Beiträge: 282
XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
|
Verfasst: 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 
      
Beiträge: 20
WIN 2000
D6 Pers
|
Verfasst: 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
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: 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?
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
msphp 
      
Beiträge: 20
WIN 2000
D6 Pers
|
Verfasst: Mi 16.02.05 19:02
Ja stimmt eigentlich. Hab nicht so viel dabei gedacht  , 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? }
|
|
Martin77
      
Beiträge: 282
XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
|
Verfasst: 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
      
Beiträge: 1144
Win XP
D5 Standard, D7 Pers, D2005 Pers
|
Verfasst: 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 
_________________ "Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
|
|
Martin77
      
Beiträge: 282
XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
|
Verfasst: 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
Aber ich glaube wir schweifen vom Thema ab 
|
|
Kedariodakon
      
Beiträge: 30
|
Verfasst: 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;
Bye
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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;  |
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)
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|