APPDATA schreibgeschützt? [gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

APPDATA schreibgeschützt? [gelöst]

Beitrag von c4s »

Gut ich gebe es zu. Ich kenne mich absolut nicht mit den Administrator-,
User-, Etc.-Rechten auf Windows aus und weiß auch nicht so recht was es
damit auf sich hat.

Jetzt war ich aber doch mal der Meinung Einstellungen, Daten usw richtig
abzuspeichern, sodass diese Dateien nicht direkt ins selbe Verzeichnis
kopiert werden, sondern eben in #CSIDL_APPDATA..
> C:\Dokumente und Einstellungen\XXX\Anwendungsdaten\

Nun dachte ich mir, dass ich einfach dort ein Verzeichnis mit dem
Firmennamen z.B. "Megasoft" und darin eines für den Programmnamen.
> C:\Dokumente und Einstellungen\XXX\Anwendungsdaten\Megasoft\MegaWindows

Das Problem hierbei ist, dass ich hier keine Dateien erstellen kann. So
finde ich dort zwar allerlei andere Ordner (auch PB) aber meine
Schreibversuche schlagen fehl...
Any ideas?

P.S.
Ich bin ganz normal eingeloggt wie man halt immer eingeloggt wird.
Mit Usernamen im Startmenu usw.
Zuletzt geändert von c4s am 16.12.2008 13:34, insgesamt 1-mal geändert.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

windows-version?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Re: APPDATA schreibgeschützt?

Beitrag von scholly »

c4s hat geschrieben:Gut ich gebe es zu. Ich kenne mich absolut nicht mit den Administrator-, User-, Etc.-Rechten auf Windows aus und weiß auch nicht so recht was es damit auf sich hat.
........
Any ideas?
Hab ich mich die Tage auch mit 'rumgeschlagen :freak:
Meine Empfehlung: ersma 'n bischen lesen :lol: :
Designed for Windows XP spec v2.3
und
WindowsVistaUACDevReqs.doc

Haben mir auf jeden Fall etwas weitergeholfen :wink:

hth...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Kaeru Gaman hat geschrieben:windows-version?
XP SP3

Kommt mir gerade echt komisch vor. Habe soeben tray0r schnell getestet
(da es auch dort abspeichert) und es funktioniert bestens.
Irgendwie scheint es mir gerade so als könnten alle Programme dort etwas
abspeichern außer meines, wobei ich ja auf den gleichen besagten Pfad
versuche zuzugreifen..

Edit:
Mir ist soeben aufgefallen, das ich zwar keine Ordner dort erstellen kann
(also z.B. nicht "Megasoft\MegaWindows\settings.ini") aber direkt ins
Verzeichnis zu kopieren funktioniert (also einfach nur "settings.ini" da rein).
Ist aber auch nicht so das Wahre.
Btw: Tray0r schreibt auch keinen Unterordner.

Muss man da als den Ordner registrieren? - das wird ja immer seltsamer.
Zuletzt geändert von c4s am 15.12.2008 23:44, insgesamt 1-mal geändert.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Little John

Beitrag von Little John »

Also bei meinen selbstgeschriebenen PB-Programmen hat es bisher auch immer anstandslos funktioniert (Windows XP SP2 bzw. SP3). Vielleicht solltest Du mal Deinen betr. Code hier posten.

//edit: Unterordner erstellen sollte ebenfalls kein Problem im APPDATA-Verzeichnis sein -- übrigens auch ohne Administrator-Rechte. Denn das ist ja gerade der Sinn dieses Verzeichnisses, dass jeder Benutzer (auch mit eingeschränkten Rechten) dort seine eigenen Einstellungen speichern kann.

Gruß, Little John
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Code: Alles auswählen

Procedure.s GetSpecialFolderPath(CSIDL.l)
	Protected LibraryID.l
	Protected Path.s = Space(#MAX_PATH)

	LibraryID = OpenLibrary(#PB_Any, "shell32.dll")
	If LibraryID
		CallFunction(LibraryID, "SHGetSpecialFolderPathA", 0, @Path, CSIDL, 0)
		CloseLibrary(LibraryID)
	EndIf

	ProcedureReturn Path
EndProcedure



File.s = "testtesttest"
AppDataPath.s = GetSpecialFolderPath(#CSIDL_APPDATA) + "\"


RunProgram(AppDataPath)
Delay(2000)

FilePath.s = AppDataPath + File
If CreateFile(1, FilePath)
	CloseFile(1)
	;DeleteFile(FilePath)
	MessageRequester("", FilePath + #CRLF$ + "Datei wurde erstellt!")
Else
	MessageRequester("", FilePath + #CRLF$ + "Datei wurde nicht erstellt!")
EndIf

FilePath.s = AppDataPath + "Megasoft\MegaWindows\" + File
If CreateFile(1, FilePath)
	CloseFile(1)
	;DeleteDirectory(AppDataPath + "Megasoft\", "")
	MessageRequester("", FilePath + #CRLF$ + "Datei und Ordner wurden erstellt!")
Else
	MessageRequester("", FilePath + #CRLF$ + "Datei und Ordner wurden nicht erstellt!")
EndIf
Also das wäre zumindest mal ein Test-Code, der eben nur die Datei
erstellt und den Ordner nicht erstellen mag :?
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

c4s hat geschrieben:Also das wäre zumindest mal ein Test-Code, der eben nur die Datei
erstellt und den Ordner nicht erstellen mag :?
CreateDirectory()? ;-)

und zusätzlich beachten: CreateDirectory() erstellt keine Unterordner.

Grüße ... Kiffi
a²+b²=mc²
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Beitrag von c4s »

Kiffi hat geschrieben:
c4s hat geschrieben:Also das wäre zumindest mal ein Test-Code, der eben nur die Datei
erstellt und den Ordner nicht erstellen mag :?
CreateDirectory()? ;-)

und zusätzlich beachten: CreateDirectory() erstellt keine Unterordner.

Grüße ... Kiffi
Ach man, das ist im echt ..deprimierend - immer solche gaanz kleinen
Fehlerchen :oops: /:->
Ich hatte sogar CreateDirectory probiert. Aber leider mit Unterordner (fehlt
wohl ein Hinweis in der Hile-Datei).

Also muss ich nun immer umständlicherweise folgendes vorher machen:
> CreateDirectory(AppDataPath + "Megasoft")
> CreateDirectory(AppDataPath + "Megasoft\MegaWindows")
und dann erst
> CreateFile(1, AppDataPath + "Megasoft\MegaWindows" + File)

Naja auf jeden Fall danke :allright:
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

c4s hat geschrieben:Ich hatte sogar CreateDirectory probiert. Aber leider mit Unterordner
(fehlt wohl ein Hinweis in der Hile-Datei).
genaugenommen...

1. in der Hilfe steht CreateDirectory(VerzeichnisName$), der Parameter heißt nicht Path$

2. das Kommando eine Direktory zu erzeugen erzeugt IMMER nur eine einzige.
egal auf welchem Rechner oder welchem OS.
also eigentlich müßte man diese Information als bekannt voraussetzen.


das bedeutet nicht, dass man keinen Hinweis in der Help hinzufügen könnte, aber er fehlt nicht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

c4s hat geschrieben:Also muss ich nun immer umständlicherweise folgendes vorher machen: [...]
... oder Du verwendest die API-Variante (Window only):

Code: Alles auswählen

MakeSureDirectoryPathExists_(path.s)
(diese Variante erzeugt den Ordner inklusive Unterordnern)

... oder (wenn es PB-nativ sein soll) lies mal diesen Thread:

http://www.purebasic.fr/german/viewtopi ... 651#152651

Grüße ... Kiffi
a²+b²=mc²
Antworten