Hä?ts-soft hat geschrieben:Also MakeSureDirectoryPathExists mit Prototypes selber importieren!
Also ist ja alles schön und gut aber schön langsam wird alles ziemlich umständlich...
Hä?ts-soft hat geschrieben:Also MakeSureDirectoryPathExists mit Prototypes selber importieren!
Nimm dies hier:Mok hat geschrieben:Also ist ja alles schön und gut aber schön langsam wird alles ziemlich umständlich...
Code: Alles auswählen
Procedure ForceDirectories(Dir.s)
If (Right(Dir.s, 1) = "\")
Dir.s = Left(Dir.s, Len(Dir.s) - 1)
EndIf
If (Len(Dir.s) < 3) Or FileSize(Dir.s) = -2 Or GetPathPart(Dir.s) = Dir.s
ProcedureReturn #False
EndIf
ForceDirectories(GetPathPart(Dir.s))
CreateDirectory(Dir.s)
ProcedureReturn #True
EndProcedure
Abgelehnt.ts-soft hat geschrieben:Einspruch:
Wie Du schon sagst, aber nicht ist1. Unter WindowsXP und Windows 2000 als eingeschränkter User, was normal
sein sollte (aber nicht ist), gilt dasselbe wie unter Vista und höher (Win9x
in einer MU Umgebung kann ich leider nicht mehr testen), also ist
die Unterscheidung schon mal falsch.
Wie wäre es hiermit ?Also MakeSureDirectoryPathExists mit Prototypes selber importieren!
Code: Alles auswählen
Procedure.l MakeDirectoryGroup(Dir$)
If Right(Dir$,1)<>"\" : Dir$+"\" : EndIf
If Mid(Dir$,2,2)=":\" And FileSize(Dir$)=-1
c$=Left(Dir$,3)
For i=4 To Len(Dir$)
b$=Mid(Dir$,i,1)
If b$<>"\"
c$+b$
Else
c$+b$
CreateDirectory(c$)
EndIf
Next
EndIf
ProcedureReturn FileSize(Dir$)
EndProcedure
;Debug MakeDirectoryGroup("D:\Test1\Test2\Test3\SubDir\")
Einspruch!ts-soft hat geschrieben:Nimm dies hier:
Habs nur auf die schnelle aus dem CodeArchiv geklaut und leicht modifiziert, kann jederal90 hat geschrieben: Wenn das Directory bereits existiert, sollte trotzdem True und nicht False zurückgegeben werden.
Hier der Mix, für Nichtversteher:Mok hat geschrieben:ok, ich versteh jetz gar nix mehr
Code: Alles auswählen
Procedure ForceDirectories(Dir.s)
If (Right(Dir.s, 1) = "\")
Dir.s = Left(Dir.s, Len(Dir.s) - 1)
EndIf
If (Len(Dir.s) < 3) Or FileSize(Dir.s) = -2 Or GetPathPart(Dir.s) = Dir.s
ProcedureReturn #True
EndIf
ForceDirectories(GetPathPart(Dir.s))
CreateDirectory(Dir.s)
ProcedureReturn #True
EndProcedure
Procedure.s GetAndCreateConfigPath(FullPath$)
Protected PrefsPath$
If Right(FullPath$, 1) <> "\" : FullPath$ + "\" : EndIf
PrefsPath$ = GetEnvironmentVariable("APPDATA") + "\" + StringField(FullPath$, CountString(FullPath$, "\"), "\") + "\"
If ForceDirectories(PrefsPath$) = #True
ProcedureReturn PrefsPath$
EndIf
EndProcedure
MyConfigPath$ = GetAndCreateConfigPath(GetPathPart(ProgramFilename()) + "PureTEST_ConfigFolder\")
Debug MyConfigPath$ ; <--- Gibt ("") zurück bei Fehlschlag!
Du kannst ohne weiteres mein erstgenanntes beispiel nehmen. Nur statt der API MakeSurePathExists nimmst Du haltMok hat geschrieben:ok, ich versteh jetz gar nix mehr
Nein das brauchst Du dann nicht mehr, da der FullPath ja bereits in MyConfigPath$ steht.Mok hat geschrieben:EDIT: Sollte ich danach auch noch SetCurrentDirectory(MyConfigPath$) machen, oder gehts dann erst recht nicht?
Code: Alles auswählen
Procedure ForceDirectories(Dir.s)
If (Right(Dir.s, 1) = "\")
Dir.s = Left(Dir.s, Len(Dir.s) - 1)
EndIf
If (Len(Dir.s) < 3) Or FileSize(Dir.s) = -2 Or GetPathPart(Dir.s) = Dir.s
ProcedureReturn #True
EndIf
ForceDirectories(GetPathPart(Dir.s))
CreateDirectory(Dir.s)
ProcedureReturn #True
EndProcedure
Procedure.s GetAndCreateConfigPath(FullPath$)
Protected PrefsPath$
If Right(FullPath$, 1) <> "\" : FullPath$ + "\" : EndIf
PrefsPath$ = GetEnvironmentVariable("APPDATA") + "\" + StringField(FullPath$, CountString(FullPath$, "\"), "\") + "\"
If ForceDirectories(PrefsPath$) = #True
ProcedureReturn PrefsPath$
EndIf
EndProcedure
Procedure.l LoadPreferences(ConfigFile$)
If OpenPreferences(ConfigFile$)
If PreferenceGroup("MyGroup")
MyValue.l = ReadPreferenceLong("MyKeyword",0)
EndIf
ClosePreferences()
EndIf
EndProcedure
; Pfad für Prefs ermitteln.
MyConfigPath$ = GetAndCreateConfigPath(GetPathPart(ProgramFilename()) + "Mok\")
; Werte aus Preferences einlesen.
LoadPreferences(MyConfigPath$ + "MyConfig.ini")