AppDirectory Ermitteln!
@ts-soft
Damit würdest Du aber das ergebnis verfälchen und das ist ja nicht
sinn der sache. Wenn ich nun anhand vom AppPath eine Externe
Datei nachladen möchte, würde ich somit auf ein falsches (CurrentDir)
verzeichnis verweisen und die Anwendung würde/könnte crashen.
Das mit mit dem C:\Programme\PureBasic\Compilers\ ist zwar blöd,
aber wie bereits hardfalcon schon sagte, völlig korrekt.
Damit würdest Du aber das ergebnis verfälchen und das ist ja nicht
sinn der sache. Wenn ich nun anhand vom AppPath eine Externe
Datei nachladen möchte, würde ich somit auf ein falsches (CurrentDir)
verzeichnis verweisen und die Anwendung würde/könnte crashen.
Das mit mit dem C:\Programme\PureBasic\Compilers\ ist zwar blöd,
aber wie bereits hardfalcon schon sagte, völlig korrekt.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Irrtum, du findest mit Compilierten Exe den richtigen Pfad, sowie auch mit der PureBasic08915.exe. Der Pfad ist in jedem Fall korrekt. Die "Verfälschung" macht der PBCompiler, was techn. bedingt aber auch notwendig ist.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Angenommen ich hatte zuvor irgendwo im Code mit CurrentDir das
verzeichnis gewechselt (aus was für einen grund auch immer. z.b. wegen
FileRequester oder so) und möchte nun ein externes File nachladen
das sich im selben (ProgrammDir) befindet. Na fällt Dir jetzt was auf ?
Ok, currentdir wird bei Deiner methode zwar nur bei /Compilers angewandt,
aber es könnte für das MainProgram fatal sein.
BTW:
Mit jaPBe greift die methode auch nicht.
verzeichnis gewechselt (aus was für einen grund auch immer. z.b. wegen
FileRequester oder so) und möchte nun ein externes File nachladen
das sich im selben (ProgrammDir) befindet. Na fällt Dir jetzt was auf ?

Ok, currentdir wird bei Deiner methode zwar nur bei /Compilers angewandt,
aber es könnte für das MainProgram fatal sein.
BTW:
Mit jaPBe greift die methode auch nicht.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Nein, weil CurrentDir von dem PBCompiler gesetzt wird, mit SetCurrentDirectory_(@Dir). Da kommt niemand mehr zwischen 

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Ein kleines beispiel:
Und wenn ich nun ein File aus dem selben (App)Dir laden möchte und
dieses (was ja niemals ausgeschlossen werden kann) mit /Compilers
endet, haben wir ein problem.
Code: Alles auswählen
dir$="C:\Windows\"
SetCurrentDirectory_(@dir$)
a$=Space(#MAX_PATH)
x=GetCurrentDirectory_(#MAX_PATH,@a$)
Debug a$
dieses (was ja niemals ausgeschlossen werden kann) mit /Compilers
endet, haben wir ein problem.

Ja, das ist es was ich gut brauchen kann. Klasse!ts-soft hat geschrieben:Hier mal meine Version, aus meiner Bausteinsammlung. Unterschied ist folgender: Es wird auch in der IDE der richtige Pfad ermittelt, wichtig für INI-Dateien usw.
...
Also beim Compilieren in der IDE wird einfach geschummelt, da die IDE autom. CurrentDirectory setzt.

:::: WIN 10 :: PB 5.73 :: (x64) ::::
Eine weitere Möglichkeit, den Start aus der Entwicklungsumgebung zu erkennen, besteht darin zu testen, ob der mit GetModuleFileName_() ermittelte Dateiname mit "PureBasic" beginnt:
Kopiert man dieses Programm in den IDE-Editor und startet es, erscheint als Applikationspfad "C:\Programme\PureBasic" (bzw. der Installationspfad von PureBASIC). Speichert man das Programm in der IDE in einem beliebigen Verzeichnis ab, erscheint nach dem Start genau dieser Pfadname. Kompiliert man dieses Programm zu einer Exe-Datei und startet die Exe-Datei (z.B. durch Doppelklick im Explorer), erscheint ebenfalls der Name des Verzeichnisses, in dem die Exe-Datei gespeichert wurde.
Code: Alles auswählen
HomeDirPath.S = Space(256)
If GetModuleFileName_(0, @HomeDirPath, Len(HomeDirPath)) = #False
MessageRequester("Fehler", "Ermittlung des Applikationsverzeichnisses mit GetModuleFileName_() fehlgeschlagen!")
Else
If UCase(Left(GetFilePart(HomeDirPath), 9)) = "PUREBASIC"
HomeDirPath = Space(256)
If GetCurrentDirectory_(Len(HomeDirPath), @HomeDirPath) = #False
MessageRequester("Fehler", "Ermittlung des Applikationsverzeichnisses mit GetCurrentDirectory_() fehlgeschlagen!")
End
EndIf
Else
HomeDirPath = GetPathPart(HomeDirPath)
HomeDirPath = Left(HomeDirPath, Len(HomeDirPath) - 1)
EndIf
MessageRequester("Info", "Applikationsverzeichnis: " + HomeDirPath)
EndIf
Zuletzt geändert von Shardik am 02.09.2005 10:55, insgesamt 1-mal geändert.
Ok. Ich mülle euch auch ein bißchen mit Api aufrufen zu und poste das gleiche aber für Linux:
Code: Alles auswählen
DefType.s directory
directory = Space(256)
;*******************************************
getcwd_(directory,Len(directory)+1);
;*******************************************
Debug directory
End
Die ganzen GUI-Sahen sind auch nur per API möglich dennnoch sind sie auf allen Platformen vorhanden, es hat sich halt bislang noch keiner die Mühe gemacht so was wie GetAppDirectory() zu schreiben, obwohl es eine Kleinigkeit wäre.Diese Dinge sind leider nicht Plattformübergreifend, deshalb also nur per API möglich.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
@Martin
Diese Version ist aber einfacher:
Diese Version ist aber einfacher:
Code: Alles auswählen
directory.s = PeekS(get_current_dir_name_())
Debug directory
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
