GetProgramDataDirectory()

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

GetProgramDataDirectory()

Beitrag 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
Zuletzt geändert von GPI am 02.12.2015 19:25, insgesamt 1-mal geändert.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
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

Re: GetProgramDataDirectory()

Beitrag 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
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.
Bild
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: GetProgramDataDirectory()

Beitrag von GPI »

ok, ist zwar ein bischen unhübsch, macht aber sinn.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
thinkitsimple
Beiträge: 16
Registriert: 25.05.2012 15:14
Wohnort: Berlin, Germany
Kontaktdaten:

Re: GetProgramDataDirectory()

Beitrag von thinkitsimple »

Aber deine Slash-Konstante verwendest du nicht, oder bin ich blind?
Michael

PureBasic 5.60, Windows und macOS
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: GetProgramDataDirectory()

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: GetProgramDataDirectory()

Beitrag 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
Zuletzt geändert von Nino am 02.12.2015 23:04, insgesamt 1-mal geändert.
Benutzeravatar
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

Re: GetProgramDataDirectory()

Beitrag von ts-soft »

@Nino
Wenn schon, dann bitte CompilerDefault :wink:
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.
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: GetProgramDataDirectory()

Beitrag von Nino »

ts-soft hat geschrieben:Wenn schon, dann bitte CompilerDefault :wink:
Stimmt. :oops:
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: GetProgramDataDirectory()

Beitrag 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).
Zuletzt geändert von GPI am 03.12.2015 10:19, insgesamt 1-mal geändert.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
NeoChris
Beiträge: 205
Registriert: 21.11.2013 21:17
Wohnort: Schweiz
Kontaktdaten:

Re: GetProgramDataDirectory()

Beitrag von NeoChris »

Windows kommt auch mit / gut klar ;)
Antworten