Delphi-PRAXiS
Seite 1 von 3  1 23   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   In welches Verzeichnis Benutzerdaten speichern? (https://www.delphipraxis.net/187011-welches-verzeichnis-benutzerdaten-speichern.html)

Catbytes 20. Okt 2015 15:02

In welches Verzeichnis Benutzerdaten speichern?
 
Hallo,

ich benötige Informationen, wie man mittlerweile Benutzerinformationen (z.B. Ini-Dateien) abspeichert. Genauer gesagt: Wo werden die abgespeichert?

Früher hieß es, in das eigene Verzeichnis, irgendwann mal die Registry und dann mal wieder das Homedir.

Was ist z.Z. "State of the Art" bzw. von Windows empfohlen?

Angeregt durch Michael Puff mit seinem Artikel (http://michael-puff.de/Programmierun.../HOMEDIR.shtml) frage ich mich nun, ob das noch relevant ist. Der Artikel ist ja schon von 2010.

Vielen Dank!

himitsu 20. Okt 2015 15:11

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Delphi-Referenz durchsuchenTPath (System.IOUtils)

z.B. Delphi-Referenz durchsuchenTPath.GetHomePath


Je nachdem, wer und wo die Daten verfügbar sein sollen:
C:\ProgramData
C:\Users\CURRENT_USER\AppData\Roaming
C:\Users\CURRENT_USER\AppData\Local
...

Und ja, in TPath fehlt irgendwie Vieles.

Uwe Raabe 20. Okt 2015 16:14

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von himitsu (Beitrag 1319229)
...

Und ja, in TPath fehlt irgendwie Vieles.

Na ja, so viel nun auch wieder nicht:

C:\ProgramData = TPath.GetPublicPath
C:\Users\CURRENT_USER\AppData\Local = TPath.GetCachePath

Die Roaming-Profile sind halt sehr Windows-spezifisch, weshalb es nicht leicht sein wird, die als multi-plattform zu gestalten. Der Charme an TPath ist halt, daß es auf allen Zielplattformen halbwegs sinnvolle Ergebnisse liefert.

Catbytes 20. Okt 2015 17:27

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1319234)
Der Charme an TPath ist halt, daß es auf allen Zielplattformen halbwegs sinnvolle Ergebnisse liefert.

Das Hauptprogramm läuft ausschließlich unter Windows.

Evtl. Zusatzprogramme vielleicht auch mal auf Android.

Grüße!

SMO 20. Okt 2015 17:32

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von Catbytes (Beitrag 1319238)
Das Hauptprogramm läuft ausschließlich unter Windows.

Unter Windows kann man einfach die Umgebungsvariablen benutzen.

Delphi-Quellcode:
// System.SysUtils.GetEnvironmentVariable
GetEnvironmentVariable('ALLUSERSPROFILE') // C:\ProgramData
GetEnvironmentVariable('APPDATA')        // C:\Users\<NAME>\AppData\Roaming
GetEnvironmentVariable('LOCALAPPDATA')   // C:\Users\<NAME>\AppData\Local
Für eine Liste aller Umgebungsvariablen einfach mal ein Terminal starten (cmd) und "set" eingeben.

Die Werte sollte man natürlich validieren (gut möglich, dass nicht alle in älteren Windowsversionen präsent sind), und wahrscheinlich eher TPath benutzen, in Hinblick auf Multiplattform.

mm1256 20. Okt 2015 18:04

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Hallo,

mal so nebenbei eine Frage - weil's doch etwas zum Thema passt. Wie haltet ihr es mit der Speicherung benutzerdefinmierter Daten?

Ich handhabe das so:

- Wenn es sich um Dateien handelt, die für den Benutzer wichtig sind, z.B. Konfigurationsdateien mit seinen persönlichen Einstellungen, speichere ich sie im Dokumentenpfad (z.B. C:\Users\USERNAME\Documents\MEIN_APP_NAME\ Hier gehe ich davon aus, dass der User seinem Dokumentenpfad erhöhte Aufmerksamkeit bei der Datensicherung schenkt (wer macht Vollbackups, z.B. mit Acronis?) und darum auch die Bezeichnung "wichtig".

- Weniger wichtige Dateien werden in C:\Users\USERNAME\AppData\Local\MEIN_APP_NAME\ gespeichert. Das sind dann z.B. Exportdateien die jederzeit wieder erzeugt oder hergestellt werden können.

- Wenn es unwichtige Dateien sind, verwende ich C:\Users\USERNAME\AppData\Roaming\MEIN_APP_NAME\

Ist das eigentlich im Sinne von Microsoft (nach den offiziellen Regeln)? So richtig schlau werde ich nämlich bei den Unterschieden zwischen AppData\Local, AppData\LocalLow und AppData\Roaming nicht.

Der schöne Günther 20. Okt 2015 18:11

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von mm1256 (Beitrag 1319245)
So richtig schlau werde ich nämlich bei den Unterschieden zwischen AppData\Local, AppData\LocalLow und AppData\Roaming nicht.

http://superuser.com/a/21462

hathor 20. Okt 2015 18:38

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Meins:
System.IOUtils.TPath.GetHomePath +'\'+Application.Title

Dalai 20. Okt 2015 20:49

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von SMO (Beitrag 1319239)
Unter Windows kann man einfach die Umgebungsvariablen benutzen.

Das sollte man eher nicht, genau wie der Zugriff auf die Registry für diesen Zweck Unsinn ist.

Zitat:

Delphi-Quellcode:
// System.SysUtils.GetEnvironmentVariable
GetEnvironmentVariable('ALLUSERSPROFILE') // C:\ProgramData
GetEnvironmentVariable('APPDATA')        // C:\Users\<NAME>\AppData\Roaming
GetEnvironmentVariable('LOCALAPPDATA')   // C:\Users\<NAME>\AppData\Local

Für all diese Verzeichnisse gibt's entsprechende CSIDLs, die man in den SHGet* Funktionen einsetzen kann.

Zitat:

Zitat von mm1256 (Beitrag 1319245)
- Wenn es sich um Dateien handelt, die für den Benutzer wichtig sind, z.B. Konfigurationsdateien mit seinen persönlichen Einstellungen, speichere ich sie im Dokumentenpfad (z.B. C:\Users\USERNAME\Documents\MEIN_APP_NAME\

Eine Speicherung dort empfinde ich als frech. Warum? Documents ist MEIN Verzeichnis für MEINE Dokumente, nicht für den Krempel, den Programme meinen da ablegen zu müssen. Gerade Spiele tun sich hier als sehr unrühmlich hervor, weil die teilweise mehrere Gigabytes an Savegames & Co dort ablegen. In Documents gehören Dokumente, keine Savegames, keine Anwendungsdaten und ähnliches Zeug.

Sowas hindert mich auch daran, meine Daten von Anwendungsdaten (die der Programme) zu trennen. Weiterhin wird es schwieriger, die Datenpartition möglichst klein zu halten, wenn Documents auf eine andere Partition verlegt wurde (was man nebenbei gesagt immer tun sollte).

Eine Ausnahme gibt es natürlich: Mit der Software erstellte Dateien, also z.B. Dateien, die mit der Anwendung verknüpft sind. Aber eben keine Konfigurationsdaten, denn die gehören in %AppData%.

Zitat:

Hier gehe ich davon aus, dass der User seinem Dokumentenpfad erhöhte Aufmerksamkeit bei der Datensicherung schenkt (wer macht Vollbackups, z.B. mit Acronis?) und darum auch die Bezeichnung "wichtig".
Wenn du dir Sorgen machst, dass der Benutzer kein Backup der Konfigurationsdaten deiner Software machst, ist das fehl am Platz, denn das ist das Problem des Nutzers. Stell im Zweifel lieber eine Anleitung bzw. eine Liste von Verzeichnissen zusammen, die der Nutzer sichern soll, wenn er sich dafür interessiert. Oder bau eine Backup-Möglichkeit in die Software ein, die eine Kopie an einem durch den Nutzer definierten Ort ablegt.

Zitat:

- Weniger wichtige Dateien werden in C:\Users\USERNAME\AppData\Local\MEIN_APP_NAME\ gespeichert. Das sind dann z.B. Exportdateien die jederzeit wieder erzeugt oder hergestellt werden können.
Sind die Dateien groß? Dann ist das richtig. Sind die Dateien relevant für den Nutzer in Domänen? Dann ist der Ort falsch, Roaming wäre besser geeignet.

MfG Dalai

mensch72 20. Okt 2015 21:28

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Ich nehme für alles was zum Programm gehört "APPDATA" als Speicherort. Unter "Documents\APPname" lege ich per default nur "Projekte&Daten" ab. Solange der Path "Documents\APPname" existiert, speichere ich dort "nebenbei" als DefaultBackup auch eine (kleine) "Documents\APPname\config.zip", damit nach einem Restore per "ZIP-Reconfig" auch die zu den Daten passenden Settings wieder hergestellt werden (können). Bisher hat sich noch niemand beschwert. Wer das nich will, der löscht das "Documents\APPname" Verzeichnis und muss sich dann eben selbst um alle Einstellungen und Backups kümmern.

Vor gaaaaanz langer Zeit hatte ich "Documents\Company\APPname", aber da viele Anwender nur das Programm kennen und nicht wissen welcher Firmenname der Herausgeber dazu ist(und so ihre Daten nicht finden oder beim "Ausmisten" löschen), habe ich per Default auf "Documents\APPname" für "Daten" umgestellt und speichere solange möglich dort nebenbei ein KLEINE "config.zip"


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 Uhr.
Seite 1 von 3  1 23   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz