Seite 1 von 1
GetExePath MultiOS PB4
Verfasst: 30.10.2006 05:47
von ts-soft
Code: Alles auswählen
Procedure.s GetExePath()
Protected ExePath.s = GetPathPart(ProgramFilename())
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
If ExePath = #PB_Compiler_Home + "Compilers\" : ExePath = GetCurrentDirectory() : EndIf
CompilerElse
If ExePath = GetTemporaryDirectory() : ExePath = GetCurrentDirectory() : EndIf
CompilerEndIf
ProcedureReturn ExePath
EndProcedure
Wird immer wieder gefragt. Relative Pfade für Dateien sollten immer mit dem
Ergebnis dieser Procedure addiert werden!
Beispiel:
Nur der relative Pfad funktioniert unter Linux garnicht und unter
Windows kommt es auf die Art und Weise des Aufrufs drauf an,
also nicht sicher!
Re: GetExePath MultiOS PB4
Verfasst: 31.10.2006 22:21
von Little John
Danke für die Prozedur und die Erläuterungen! Es wäre sicher nur eine Frage der Zeit gewesen, bis ich über das Problem gestolpert wäre.
Ich habe zwei kleine Verbesserungsvorschläge:
a) Bei mir ( unter Windows 98 ) muss es heißen
sonst funktioniert der Vergleich nicht.
[edit]
Sorry, das stimmt so nicht, weil ich eine Variable umbenannt hatte. Gemeint war:
[/edit]
Vielleicht sollte man sicherheitshalber auch besser
schreiben?
b) Ich denke der Name "GetProgPath()" wäre zutreffender, denn soweit ich es verstehe, muss das betr. Programm keine EXE-Datei sein. Es kann sich ja auch um ein Programm handeln, das innerhalb der IDE ausgeführt wird, oder?
Gruß, Little John
Re: GetExePath MultiOS PB4
Verfasst: 31.10.2006 23:08
von ts-soft
Little John hat geschrieben:
a) Bei mir ( unter Windows 98 ) muss es heißen
sonst funktioniert der Vergleich nicht.
Der Ordner wird unter allen Windowssystemen mit dem gleichen Namen angelegt, "COMPILERS" hab ich noch nie gesehen.
Little John hat geschrieben:
Vielleicht sollte man sicherheitshalber auch besser
schreiben?
siehe oben
Little John hat geschrieben:
b) Ich denke der Name "GetProgPath()" wäre zutreffender, denn soweit ich es verstehe, muss das betr. Programm keine EXE-Datei sein. Es kann sich ja auch um ein Programm handeln, das innerhalb der IDE ausgeführt wird, oder?
Programmierer sprechen beim Source von einem Programm. Das andere
ist die ausführbare Datei, eben die "Exe"
Diese Routine erkennt automatisch, wenn sie in der IDE ausgeführt wird,
und korrigiert den Pfad auf das aktuelle Verzeichnis, das in diesem Falle
vom Compiler gesetzt wurde.
Gruß
Thomas
Re: GetExePath MultiOS PB4
Verfasst: 01.11.2006 16:35
von Little John
ts-soft hat geschrieben:Little John hat geschrieben:
a) Bei mir ( unter Windows 98 ) muss es heißen
sonst funktioniert der Vergleich nicht.
Der Ordner wird unter allen Windowssystemen mit dem gleichen Namen angelegt, "COMPILERS" hab ich noch nie gesehen.
Ich verstehe Deine Antwort nicht -- vielleicht liegt hier ein Missverständnis vor. Siehe bitte auch das "Edit" in meinem ersten Beitrag dieses Threads.
Ich hatte sagen wollen, dass bei mir der Vergleich so wie Du ihn formuliert hattest
immer #False ist, was ja nicht Sinn der Sache sein kann.
GetPathPart(ProgramFilename()) liefert nämlich bei mir einen String, der ausschließlich aus Großbuchstaben besteht. Daher muss es im Vergleichsstring eben nicht "Compilers" heißen, sondern "COMPILERS". Generell ist es unter Windows eine gute Idee, Pfad- und Dateinamen unabhängig von Groß-/Kleinschreibung zu vergleichen, da Windows -- anders als Linux -- Groß- und Kleinschreibung in Dateinamen nicht unterscheidet (außer für die Optik).
ts-soft hat geschrieben:Little John hat geschrieben:
b) Ich denke der Name "GetProgPath()" wäre zutreffender, denn soweit ich es verstehe, muss das betr. Programm keine EXE-Datei sein. Es kann sich ja auch um ein Programm handeln, das innerhalb der IDE ausgeführt wird, oder?
Programmierer sprechen beim Source von einem Programm. Das andere ist die ausführbare Datei, eben die "Exe"
Sicher handelt es sich bei Source-Code um ein Programm -- aber auch z.B. EXE- oder COM-Dateien sind Programme (eben in binärer Form). "Programm" ist der Oberbegriff. Wenn Source-Code gemeint ist, sollte auch Source-Code geschrieben werden, dafür wurde der Begriff erfunden.
ts-soft hat geschrieben:Diese Routine erkennt automatisch, wenn sie in der IDE ausgeführt wird, und korrigiert den Pfad auf das aktuelle Verzeichnis, das in diesem Falle vom Compiler gesetzt wurde.
Dann habe ich das ja richtig verstanden.

Und da sich in der IDE der Quelltext (bei dem es sich um ein Programm handelt, da sind wir uns ja einig) befindet, und keine EXE-Datei, ist IMHO eben der Name GetProgPath() passender.
Gruß, Little John
Verfasst: 01.11.2006 19:13
von ts-soft
Der Pfad, ausschließlich "Compilers" wird ermittelt, sollte also stimmen, wenn
jemand aus Compilers COMPILERS macht, ist das sein Problem.
Es ist aber sicher besser nicht Casesensitiv zu vergleichen, aber in diesem
Fall halte ich es für unnötig. Kannst es Dir ja anpassen, diese Zeilen wirken
sich ja sowieso in der fertigen Anwendung nicht aus, sondern nur die Erste.
Exe <> Programm
In der Ide compiliert wird auch eine Exe ausgeführt, wenn diese auch
temporär generiert wird.
Verfasst: 01.11.2006 19:34
von Little John
ts-soft hat geschrieben:wenn jemand aus Compilers COMPILERS macht, ist das sein Problem.
Ich habe nicht aus Compilers COMPILERS gemacht, sondern so wie ich es geschildert habe, wurde es vom PB-Installationsprogramm eingerichtet.
ts-soft hat geschrieben:In der Ide compiliert wird auch eine Exe ausgeführt, wenn diese auch temporär generiert wird.
Ja, aber Dein Code liefert den Pfad zur Quelltext-Datei, und
nicht den Pfad zur temporären EXE-Datei. Daher mein Vorschlag, der Klarheit halber keinen irreführenden Namen zu verwenden.
Wie gesagt nur "kleine Verbesserungsvorschläge".
Gruß, Little John
Verfasst: 01.11.2006 20:24
von a14xerus
das liegt am arbeitsverzeichniss
Wenn man das Programm über verknüpfungen oder über runprogram aufruft kann man dieses angeben.
(habe mir nich alles durchgelesen deswegen sry für evt doppelpost)
//edit>: durchgelesen:
eine gleichung achtet auf groß/kkleinschreibung also a<>A