Seite 2 von 2
Re: GetProgramDataDirectory()
Verfasst: 03.12.2015 10:22
von GPI
NeoChris hat geschrieben:Windows kommt auch mit / gut klar

Immer und überall und mit allen Programm etc? Das kann sehr schnell zu Fehlern führen, den man anschließend Ewigkeiten sucht. Sowas macht imo halt den Unterschied zwischen einen guten und einen schlechten Programm aus.
Re: GetProgramDataDirectory()
Verfasst: 03.12.2015 11:54
von ts-soft
NeoChris hat geschrieben:Windows kommt auch mit / gut klar

In manchen Situationen, aber nicht in allen!
Einfaches Beispiel aus der Hilfe:
Code: Alles auswählen
InitialPath$ = "C:\" ; anfänglichen Pfad für die Anzeige festlegen (kann auch leer sein)
Path$ = PathRequester("Bitte wählen Sie einen Pfad aus", InitialPath$)
If Path$
MessageRequester("Information", "Sie haben folgenden Pfad ausgewählt:"+Chr(10)+Path$, 0)
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
InitialPath$ = "C:/" ; anfänglichen Pfad für die Anzeige festlegen (kann auch leer sein)
Path$ = PathRequester("Bitte wählen Sie einen Pfad aus", InitialPath$)
If Path$
MessageRequester("Information", "Sie haben folgenden Pfad ausgewählt:"+Chr(10)+Path$, 0)
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", 0)
EndIf
Re: GetProgramDataDirectory()
Verfasst: 28.09.2017 12:48
von uweb
Code: Alles auswählen
; #Slash-DefaultPath-BinPath-DataPath.pbi
;
; erkennt SystemDefaultProgramDataDirectory; kann aber auch mit portablen Programmen oder Programmen aus der IDE umgehen (nutzt den SourcePath)
; dadurch ist es universell nutzbar- "Use your path here" ist nicht mehr notwendig
; erkennt "\bin" und nutzt gegebenenfalls "..\data" wenn SystemDefaultProgramDataDirectory nicht verfügbar ist
;
EnableExplicit
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#Slash = "\"
CompilerDefault
#Slash = "/"
CompilerEndSelect
Procedure.s GetDefaultDataDirectory()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
ProcedureReturn GetEnvironmentVariable("APPDATA") + #Slash
CompilerCase #PB_OS_MacOS
ProcedureReturn GetHomeDirectory() + "Library/Application Support/"
CompilerCase #PB_OS_Linux
ProcedureReturn GetHomeDirectory() +"."
CompilerEndSelect
EndProcedure
Define.s DataPath, DefaultPath=GetDefaultDataDirectory()
Define.s BinPath = DefaultPath+GetFilePart(ProgramFilename(),#PB_FileSystem_NoExtension)
;Define.s BinPath = DefaultPath+"MyDifferentDirectoryName" ; fix, from Preference, ProgramParameter() or whatever
If Bool(Left(GetFilePart(ProgramFilename()), 9) = "PureBasic")
BinPath = GetPathPart(ProgramFilename())
Else
If FileSize(BinPath)=-1
BinPath = GetPathPart(ProgramFilename())
EndIf
EndIf
If Right(BinPath,4)="bin"+#Slash
DataPath = Left(BinPath, Len(BinPath)-4)+"data"+#Slash
CreateDirectory(DataPath)
Else
DataPath = BinPath
EndIf
Code: Alles auswählen
; for testing
;
EnableExplicit
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
#Slash = "\"
CompilerDefault
#Slash = "/"
CompilerEndSelect
Procedure.s GetDefaultDataDirectory()
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
ProcedureReturn GetEnvironmentVariable("APPDATA") + #Slash
CompilerCase #PB_OS_MacOS
ProcedureReturn GetHomeDirectory() + "Library/Application Support/"
CompilerCase #PB_OS_Linux
ProcedureReturn GetHomeDirectory() +"."
CompilerEndSelect
EndProcedure
Define.s DataPath, DefaultPath=GetDefaultDataDirectory(), Title
Define.s BinPath = DefaultPath+GetFilePart(ProgramFilename(),#PB_FileSystem_NoExtension)
;Define.s BinPath = DefaultPath+"MyDifferentDirectoryName" ; fix, from Preference, ProgramParameter() or whatever
If Bool(Left(GetFilePart(ProgramFilename()), 9) = "PureBasic")
Title= "from IDE" ; DataPath and BinPath = SourcePath
BinPath = GetPathPart(ProgramFilename())
Else
If FileSize(BinPath)=-1
Title= "portable"
BinPath = GetPathPart(ProgramFilename())
Else
Title="DefaultProgramDataDirectory"
EndIf
EndIf
If Right(BinPath,4)="bin"+#Slash
DataPath = Left(BinPath, Len(BinPath)-4)+"data"+#Slash
CreateDirectory(DataPath)
Else
DataPath = BinPath
EndIf
MessageRequester(Title, "BinPath : "+BinPath+Chr(10)+"DataPath : "+DataPath, #PB_MessageRequester_Ok)