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 Suche in der Entwickler-Ecke GETSHELLFOLDER. Die benötigte Konstante für den Anwendungsdaten-Ordner ist const CSIDL_APPDATA = $001a;


Xentar - Mi 09.12.09 12:21

Und wo ist der Unterschied, zu deinem anderen Thread?
http://www.delphi-forum.de/viewtopic.php?t=96418


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

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:

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);  //Pfad holen
  s := IncludeTrailingPathDelimiter(s); //Abschließenden Backslash anfügen
  if ForceDirectories(s + 'DeinProgName\'then  //Unterverzeichnis mit dem Namen deines Programms anlegen
  begin
    //In s + 'DeinProgName\' kannst du jetzt Programmeinstellungen abspeichern
  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

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconNano-Ware hat folgendes geschrieben Zum zitierten Posting springen:
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.