Seite 1 von 1

Aktueller exe Pfad

Verfasst: 24.12.2010 09:49
von Velindos
Hallo,
wie erhalte ich im PB den aktuellen exe-Pfad meiner Anwendung, sprich wo ich Sie gestartet habe?
Will mein Programm in verschiedene Verzeichnisse speichern und bei Aufruf nur jeweilige(SQL-Datei) DatenDatei verwenden.

Gruss und ein frohes Fest ... Velindos

PS: Du fährst mit dem Auto und hältst eine konstante Geschwindigkeit. Auf deiner linken Seite befindet sich ein Abhang. Auf deiner rechten Seite fährt ein riesiges Feuerwehrauto und hält die gleiche Geschwindigkeit wie du. Vor dir galoppiert ein Schwein, das eindeutig grösser ist als dein Auto und du kannst nicht vorbei. Hinter dir verfolgt dich ein Hubschrauber auf Bodenhöhe. Das Schwein und der Hubschrauber haben exakt deine Geschwindigkeit!
Was unternimmst du, um dieser Situation gefahrlos zu entkommen???


Vom Kinderkarussell absteigen und weniger Glühwein saufen!!!!

Re: Aktueller exe Pfad

Verfasst: 24.12.2010 09:59
von Waldixxl
Hallo Velindos

Versuche es mal mit ProgramFilename()

Frohe Weihnacht
Walter

Re: Aktueller exe Pfad

Verfasst: 24.12.2010 10:16
von ts-soft
oder besser mit: GetPathPart(ProgramFilename())

ACHTUNG: Damit der Pfad auch in der IDE stimmt (weil normalerweise compiliert die IDE im Tempordner),
in den Einstellungen:
Compiler / Standards / Temporäres Executable im Quellcode-Verzeichnis erstellen abhaken.

Frohes Fest
Thomas

Re: Aktueller exe Pfad

Verfasst: 05.01.2011 16:36
von Velindos
Hallo,
hier die ganze Geschichte zum Nachlesen!

Code: Alles auswählen

Procedure DatenbasefileSet()
  Aktuell_Pfad$=ProgramFilename()
  PathRemoveFileSpec_(@Aktuell_Pfad$)
  DatabaseFile$= Aktuell_Pfad$+"\"+"Zieldatei.xxx" ; Hier die Zieldatei
  MessageRequester("","Pfad: "+DatabaseFile$,0)
EndProcedure
Findet, schneidet und fügt ein!

Gruss ... Velindos

Re: Aktueller exe Pfad

Verfasst: 05.01.2011 16:42
von ts-soft
@Velindos
Die verwendete API ist doch unnötig, PB kennt doch GetPathPart() :wink:

Re: Aktueller exe Pfad

Verfasst: 26.01.2011 09:25
von Velindos
Hallo,
habe den Rat befolgt und die Sache auf das umgestellt!

Code: Alles auswählen

  Aktuell_Pfad$=ProgramFilename()
  PathRemoveFileSpec_(@Aktuell_Pfad$)
  DatabaseFile$= Aktuell_Pfad$+"\"+"Zieldatei.xxx" ; Hier die Zieldatei
  MessageRequester("","Pfad: "+DatabaseFile$,0)
  
  Debug DatabaseFile$

  DatabaseFile1$=GetPathPart(Aktuell_Pfad$) 
  DatabaseFile2$=DatabaseFile1$+"Zieldatei.xxx"; Hier die Zieldatei
  MessageRequester("","Pfad: "+DatabaseFile2$,0)

  Debug DatabaseFile1$
  Debug DatabaseFile2$
Nun ganz Funzt die Sache nicht. Den beim Debugen erhält folgende Aussagen:

C:\Users\MEDION\AppData\Local\Temp\Zieldatei.xxx
C:\Users\MEDION\AppData\Local\
C:\Users\MEDION\AppData\Local\Zieldatei.xxx

Plötzlich fehlt \Temp?

Gruss ... Velindos

Re: Aktueller exe Pfad

Verfasst: 26.01.2011 09:43
von STARGÅTE
Weil du mit der API PathRemoveFileSpec_(@Aktuell_Pfad$) den Aktuellen Pfad im Speicher änderst!
Damit fehlt für das untere Zeug, das temp schon:

Code: Alles auswählen

  Aktuell_Pfad$=ProgramFilename()
  PathRemoveFileSpec_(@Aktuell_Pfad$)
  DatabaseFile$= Aktuell_Pfad$+"\"+"Zieldatei.xxx" ; Hier die Zieldatei
  MessageRequester("","Pfad: "+DatabaseFile$,0)
  
  Debug DatabaseFile$

  Aktuell_Pfad$=ProgramFilename()
  DatabaseFile1$=GetPathPart(Aktuell_Pfad$) 
  DatabaseFile2$=DatabaseFile1$+"Zieldatei.xxx"; Hier die Zieldatei
  MessageRequester("","Pfad: "+DatabaseFile2$,0)

  Debug DatabaseFile1$
  Debug DatabaseFile2$

Re: Aktueller exe Pfad

Verfasst: 26.01.2011 09:57
von Velindos
Hallo,
wusste ich nicht, werde es gleich einbauen!

Danke für deine RAT!

Gruss ... Velindos

Re: Aktueller exe Pfad

Verfasst: 26.01.2011 10:01
von STARGÅTE
Es ist ein Unterschied ob du einer Funktion (Prozedur) eine Variable (String) als Wert übergibst:
Irgendwas(String$)
oder als Adresse (Referenz):
Irgendwas(@String$)

Beim ersten übergibst du eine Kopie, die dann verändert wird, uns ggf. wieder zurück gegeben wird.
Beim zweiten übergibst du die Adresse des Originals, was dann auch verändert wird.
Deswegen wird bei PathRemoveFileSpec_() auch nichts zurück geben. weil es ja direkt verändert wird.
Bei GetPathPart() bekommst du die Kopie sozusagen zurück.