Autor Beitrag
msphp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN 2000
D6 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mi 16.02.05 14:13 
Damit:

ausblenden Delphi-Quelltext
1:
ExtractFilePath(ParamStr(0));					


Gruß,
raziel

_________________
JSXGraph
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: 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

_________________
JSXGraph
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN 2000
D6 Pers
BeitragVerfasst: Mi 16.02.05 18:39 
Vielen Dank! Funktioniert hervorragend :)

ausblenden 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;

//An anderer Stelle dann verwendet:
findfirst(ExtractFileDir(ProgLocation)+'\..\player\*.*',faAnyFile,SR);
//u.s.w


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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WIN 2000
D6 Pers
BeitragVerfasst: 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:
ausblenden 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;

//An anderer Stelle dann verwendet:
findfirst(ProgLocation+'\..\player\*.*',faAnyFile,SR);
//u.s.w


Danke für den Hinweis

{Wiso einfach, wenn es auch kompliziert geht? :angel: }
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: 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:

_________________
"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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 30



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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)

_________________
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