Seite 2 von 4
Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 22:54
von Mok
ts-soft hat geschrieben:Also MakeSureDirectoryPathExists mit Prototypes selber importieren!
Hä?
Also ist ja alles schön und gut aber schön langsam wird alles ziemlich umständlich...
Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 22:55
von ts-soft
Mok hat geschrieben:Also ist ja alles schön und gut aber schön langsam wird alles ziemlich umständlich...
Nimm dies hier:
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
geht auch ohne diese blöde API

Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 23:03
von al90
ts-soft hat geschrieben:Einspruch:
Abgelehnt.
1. 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 Du schon sagst,
aber nicht ist
Also MakeSureDirectoryPathExists mit Prototypes selber importieren!
Wie wäre es hiermit ?
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\")
Kann man sicherlich noch optimieren. Hatte ich aber noch so auf pladde tummeln.

Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 23:11
von al90
ts-soft hat geschrieben:Nimm dies hier:
Einspruch!
Wenn das Directory bereits existiert, sollte trotzdem
True und nicht
False zurückgegeben werden.

Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 23:19
von ts-soft
al90 hat geschrieben:
Wenn das Directory bereits existiert, sollte trotzdem
True und nicht
False zurückgegeben werden.

Habs nur auf die schnelle aus dem CodeArchiv geklaut und leicht modifiziert, kann jeder
halten, mit wahr oder falsch.
Ansonsten, auf Arbeit, unter XP, haben die Programme nicht das Recht ins Progammverzeichnis
zu schreiben, was normal ist, nur auf unsicheren Homeuser (DAU) Kisten eben nicht, diese
überwiegen ja leider

Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 23:23
von Mok
ok, ich versteh jetz gar nix mehr
Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 23:27
von ts-soft
Mok hat geschrieben:ok, ich versteh jetz gar nix mehr
Hier der Mix, für Nichtversteher:
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!
Ich hoffe das geht jetzt, wie es soll
Re: Preference kann nicht geöffnet werden
Verfasst: 28.12.2009 23:30
von al90
Mok hat geschrieben:ok, ich versteh jetz gar nix mehr
Du kannst ohne weiteres mein erstgenanntes beispiel nehmen. Nur statt der API
MakeSurePathExists nimmst Du halt
entweder die von ts-soft beschriebene, oder meinen zuletzt genannten code zur ergänzung.
Edit:
Ah ts-soft war schneller. Na dann sollte ja alles geklärt sein.

Re: Preference kann nicht geöffnet werden
Verfasst: 29.12.2009 10:42
von Mok
Mit ein wenig Nachhilfe geht alles.
Danke euch beiden
EDIT: Sollte ich danach auch noch SetCurrentDirectory(MyConfigPath$) machen, oder gehts dann erst recht nicht?
Re: Preference kann nicht geöffnet werden
Verfasst: 29.12.2009 17:19
von al90
Mok hat geschrieben:EDIT: Sollte ich danach auch noch SetCurrentDirectory(MyConfigPath$) machen, oder gehts dann erst recht nicht?
Nein das brauchst Du dann nicht mehr, da der
FullPath ja bereits in
MyConfigPath$ steht.
Hier mal eine weitere kleine ergänzung zum code wie ich es machen würde. Vllt kannst Du ja was damit anfangen.
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")
Die Prefs-Befehle habe ich in einer Proc gepackt, damit es übersichtlicher wird. Diese brauchst Du dann nur noch nach
eigenbedarf anzupassen. Als Parameter wird der FullPath+Name der Configuration übergeben. Alternativ könntest Du aber
auch z.b. MyConfigPath$ Globalisieren. Dann bräuchtest du den namen nicht immer mit in den Proc-Params mit angeben.
Ausserdem empfehle ich noch eine SavePreferences() Proc als ergänzung dazu zu schreiben. Dann kannst Du immer &
überall vom Hauptproggi aus darauf zugreifen und es wäre eine "Saubere" programmierung.
