Preference kann nicht geöffnet werden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Preference kann nicht geöffnet werden

Beitrag 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...
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
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: Preference kann nicht geöffnet werden

Beitrag 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 :wink:
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Re: Preference kann nicht geöffnet werden

Beitrag von al90 »

ts-soft hat geschrieben:Einspruch:
Abgelehnt. :mrgreen:
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 :mrgreen: ), also ist
die Unterscheidung schon mal falsch.
Wie Du schon sagst, aber nicht ist :mrgreen:
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. :mrgreen:
Zuletzt geändert von al90 am 28.12.2009 23:15, insgesamt 1-mal geändert.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Re: Preference kann nicht geöffnet werden

Beitrag von al90 »

ts-soft hat geschrieben:Nimm dies hier:
Einspruch! :mrgreen:

Wenn das Directory bereits existiert, sollte trotzdem True und nicht False zurückgegeben werden. :wink:
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: Preference kann nicht geöffnet werden

Beitrag von ts-soft »

al90 hat geschrieben: Wenn das Directory bereits existiert, sollte trotzdem True und nicht False zurückgegeben werden. :wink:
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 :mrgreen:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Preference kann nicht geöffnet werden

Beitrag von Mok »

ok, ich versteh jetz gar nix mehr
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
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: Preference kann nicht geöffnet werden

Beitrag 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
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Re: Preference kann nicht geöffnet werden

Beitrag 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. :wink:

Edit:

Ah ts-soft war schneller. Na dann sollte ja alles geklärt sein. :wink:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Preference kann nicht geöffnet werden

Beitrag von Mok »

Mit ein wenig Nachhilfe geht alles.
Danke euch beiden :allright:

EDIT: Sollte ich danach auch noch SetCurrentDirectory(MyConfigPath$) machen, oder gehts dann erst recht nicht?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Re: Preference kann nicht geöffnet werden

Beitrag 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. :wink:

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. :wink:
Antworten