Entwickler-Ecke
Dateizugriff - TEMP Ordner
Nano-Ware - Mi 09.12.09 11:45
Titel: TEMP Ordner
Hi,
ich wollte nur fragen, wo ich meine Dateien für mein Programm ohn Administratorrechte ablegen darf (bitte Variable dazu :wink:)
Also ich bräuchte einen Ordner (keinen Temporären, sondern einen wo die Programmeinstellungen gespeichert werden) der nur für einen Benutzer gilt
Dann einen Temporären, der nur für einen Benutzer gilt
Und einen NICHT temporären Ordner, wo ich für JEDEN Benutzer Dateien speichern kann (auch Einstellungen)
WICHTIG: Es dürfen keine Adminrecht benötigt werden (Ordner werden dann beim Setup erstellt)
Gausi - Mi 09.12.09 11:53
Am besten ist dafür das User-Verzeichnis geeignet. Also C:\Dokumente und Einstellungen\username\usw. Und da dann in den Anwendungsdaten-Ordner.
Das Verzeichnis bekommt man über die API - such mal nach
GETSHELLFOLDER. Die benötigte Konstante für den Anwendungsdaten-Ordner ist
const CSIDL_APPDATA = $001a;
Nano-Ware - Mi 09.12.09 14:11
Der Unterschied ist, dass ich in meinem alten Thread gefragt hab ob ich Dateien im eigenen Programmordner speichern darf und jetzt will ich wissen wo diese Ordner sind :wink:
C:\Users\[User]\AppData\Roaming also da schein ich ja was speichern zu dürfen^^ gibts da bei Delphi 2010 ne Konstante dafür?
Weil unter Projekt->Optionen->Debugger->Umgebungsblock da hab ich die Konstante APPDATA gefunden hat das was damit zu tun, also passt die sich dem System an?
Und in welchen Dateipfad mit welcher Konstante kann ich ohne Adminrechte Dateien für alle Benutzer speichern?
Sry wenn ich jetzt wieder frag, aber ichh hab da oben nur Bahnhof verstanden :wink: nich böse gemeint^^
Xentar - Mi 09.12.09 14:14
In genanntem Thread hab ich eine Anleitung verlinkt, wo genau erklärt wird, wie man den PFad unter verschiedenen Betriebssystemen herausbekommt.
Andreas L. - Mi 09.12.09 14:38
Nano-Ware hat folgendes geschrieben : |
C:\Users\[User]\AppData\Roaming also da schein ich ja was speichern zu dürfen^^ gibts da bei Delphi 2010 ne Konstante dafür?
|
Gausi hat dir doch schon gesagt was du machen musst. Die Funktion GetShellFolder einbinden und diese dann mit der Konstante CSIDL_APPDATA als Parameter aufrufen. Ein Verzeichnis in dem alle User schrieben drüfen ist das AllUser-Verzeichnis. Du bekommst es auf selben Weg mit der Konstante CSIDL_COMMON_APPDATA
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var s: String; begin s := GetShellFolder(CSIDL_APPDATA); s := IncludeTrailingPathDelimiter(s); if ForceDirectories(s + 'DeinProgName\') then begin end; end; |
Nano-Ware - Do 10.12.09 21:54
Ok danke, wie ist das eigentlich? Wenn ich einen Ordner in "Programme" hab (C:/Pragram Files/MyPrograms/Data/) und da noch einen Unterordner "Data". Wenn ich jetzt im Ordner "Data" eine Translate.xxx hab kann ich die dann als "MyPrograms" auch ohne Adminrechte lesen betonung auf LESEN^^
Gausi - Do 10.12.09 21:57
Lesen geht. ;-)
Xentar - Do 10.12.09 22:16
Auch wenn ich mich wiederhole..
Pfade unter Windows mit \
Delete - Do 10.12.09 23:56
Xentar hat folgendes geschrieben : |
Auch wenn ich mich wiederhole..
Pfade unter Windows mit \ |
Das ist richtig. Standard ist der "\", aber Windows kann auch mit "/" arbeiten, das macht keinen Unterschied.
jaenicke - Fr 11.12.09 00:12
Nano-Ware hat folgendes geschrieben : |
Also ich bräuchte einen Ordner (keinen Temporären, sondern einen wo die Programmeinstellungen gespeichert werden) der nur für einen Benutzer gilt |
Dafür geht das oben genannte Verzeichnis für die Anwendungsdaten.
Wenn du es dir einfach machen willst, kannst du auch meine
Config Utils [
http://www.delphi-forum.de/viewtopic.php?t=92348] verwenden, dann kannst du dem Benutzer die Wahl lassen ob er es portabel nutzen will oder fest installiert. Du selbst musst dich dann nicht drum kümmern.
Nano-Ware hat folgendes geschrieben : |
Dann einen Temporären, der nur für einen Benutzer gilt |
Das ist der normale Temp-Ordner, den du via GetTempPath herausbekommst. Via GetTempFileName kannst du auch direkt einen Dateinamen bekommen.
Wie das in Delphi verwendet wird kannst du z.B. hier sehen:
http://www.delphi-library.de/viewtopic.php?t=89603
Nano-Ware hat folgendes geschrieben : |
Und einen NICHT temporären Ordner, wo ich für JEDEN Benutzer Dateien speichern kann (auch Einstellungen)
WICHTIG: Es dürfen keine Adminrecht benötigt werden (Ordner werden dann beim Setup erstellt) |
Das ist so
nicht möglich! Wenn du in die Anwendungsdaten für alle Benutzer Daten schreibst, dann geht das AFAIK unter Windows 2000 nur mit Adminrechten. Ab Windows XP geht es zwar ohne, aber nur der Besitzer hat Schreibrechte in die Dateien, d.h. alle anderen können diese ohne Adminrechte nur lesen.
Das ist auch gut so, damit man nicht die Daten anderer Nutzer zerstören kann. Man kann aber über dieses Verzeichnis einen Import einrichten, so dass dort die Daten abgelegt und von den anderen Nutzern beim Start der Software eingelesen werden. Änderungen müssen dann ebenfalls dort abgelegt und beim Start unter anderen Benutzern importiert werden.
Andere Möglichkeit: In den gemeinsamen Anwendungsdaten (unter All Users) vom Setup einen Ordner erstellen lassen und dort (beim Setup ja mit Adminrechten) die ACLs des NTFS-Dateisystems modifizieren, so dass jeder Benutzer darin schreiben kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!