Seite 1 von 2

GetProgramDataDirectory()

Verfasst: 02.12.2015 18:33
von GPI
Es gibt zwar in PureBasic die Funktion um das Home-Verzeichnis zu bestimmen, aber unter Windows und Mac ist es nicht das Verzeichnis, wo man seine Programm-Einstellungen etc. unterbringen sollte.
Der Code basiert auf diesen Thread http://www.purebasic.fr/german/viewtopi ... =8&t=27741 ich hab es nur umformuliert

Nebenbei wird noch eine #Slash Konstante definiert, da ja dies auch OS-Abhängig ist. Ok, windows ist da toleranter und akzeptiert auch / :)

Code: Alles auswählen

;    Description: Return the Program Data directory of os/user
;         Author: -
;           Date: 02-12-2015
;     PB-Version: 5.40
;             OS: Windows, Linux, Mac
;  English-Forum: 
;   French-Forum: 
;   German-Forum: 
; -----------------------------------------------------------------------------
; based on this code: http://www.purebasic.fr/german/viewtopic.php?f=8&t=27741

CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    #Slash = "\"
  CompilerCase #PB_OS_MacOS
    #Slash = "/"
  CompilerCase #PB_OS_Linux
    #Slash = "/"
CompilerEndSelect

Procedure.s GetProgramDataDirectory()
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Windows
      ProcedureReturn GetEnvironmentVariable("APPDATA") + "\"
    CompilerCase #PB_OS_MacOS
      ProcedureReturn GetHomeDirectory() + "Library/Application Support/"
    CompilerCase #PB_OS_Linux
      ProcedureReturn GetHomeDirectory() +"."
  CompilerEndSelect
EndProcedure

;-Example
CompilerIf #PB_Compiler_IsMainFile
  path$=GetProgramDataDirectory()
  Debug path$
  Debug FileSize(path$)
CompilerEndIf

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 19:18
von ts-soft
Ich würde für Linux noch den "." miteinarbeiten, so:

Code: Alles auswählen

    CompilerCase #PB_OS_Linux
      ProcedureReturn GetHomeDirectory() + "."
weil der ist für Linux immer erforderlich (versteckt das Verzeichnis) und macht die Funktion erst richtig nutzbar.

Gruß
Thomas

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 19:26
von GPI
ok, ist zwar ein bischen unhübsch, macht aber sinn.

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 20:48
von thinkitsimple
Aber deine Slash-Konstante verwendest du nicht, oder bin ich blind?

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 20:56
von GPI
thinkitsimple hat geschrieben:Aber deine Slash-Konstante verwendest du nicht, oder bin ich blind?
Ist kein Beispiel dabei. Und der Code, der die Pfade abfragt ist systemabhängig. Da ist schon der passte Slash drin :) Die Konstante ist dafür gedacht, wenn man selbst irgendwelche Pfade zusammenbauen will.

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 22:00
von Nino
GPI hat geschrieben:Die Konstante ist dafür gedacht, wenn man selbst irgendwelche Pfade zusammenbauen will.
Ja, das will man ja öfter mal. :-)

Allerdings nicht nur im Zusammenhang mit GetProgramDataDirectory(), sondern auch in anderen Situationen.
Deshalb finde ich es unlogisch, dass das hier in diesem Code enthalten ist, wenn es von GetProgramDataDirectory() gar nicht benutzt wird.

Im Übrigen würde ich das eher so schreiben:

Code: Alles auswählen

CompilerSelect #PB_Compiler_OS
   CompilerCase #PB_OS_Windows
      #Slash = "\"
   CompilerDefault
      #Slash = "/"
CompilerEndSelect

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 22:50
von ts-soft
@Nino
Wenn schon, dann bitte CompilerDefault :wink:

Re: GetProgramDataDirectory()

Verfasst: 02.12.2015 23:05
von Nino
ts-soft hat geschrieben:Wenn schon, dann bitte CompilerDefault :wink:
Stimmt. :oops:

Re: GetProgramDataDirectory()

Verfasst: 03.12.2015 10:07
von GPI
Nino hat geschrieben:Im Übrigen würde ich das eher so schreiben:

Code: Alles auswählen

CompilerSelect #PB_Compiler_OS
   CompilerCase #PB_OS_Windows
      #Slash = "\"
   CompilerDefault
      #Slash = "/"
CompilerEndSelect
Ok, auch eine Möglichkeit :)

Das mit #Slash ist halt so eine Sache. Eigentlich müsste PB so eine Konstante mitliefern. Ich werd mal bei Gelegenheit einen Vorschlag machen. Genauso wie eigentlich diese Funktion hier essentiell wäre, neben einigen anderen Verzeichnissen, wie Eigene Dokumente, Eigene Bilder und Eigene Musik. Ab und zu möchte man als Programm doch auf diese Verzeichnisse zugreifen können (bspw. um Benutzerdefinierte Musik abspielen zu können oder irgendwelche Screenshots in richtigen Ordner abzulegen).

Re: GetProgramDataDirectory()

Verfasst: 03.12.2015 10:17
von NeoChris
Windows kommt auch mit / gut klar ;)