Delphi-PRAXiS

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"

Dejan Vu 21. Okt 2015 07:09

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von Dalai (Beitrag 1319264)
Eine Speicherung dort empfinde ich als frech. Warum? Documents ist MEIN Verzeichnis für MEINE Dokumente

Bist du wirklich so empfindlich? Nimm nen Snickers ;-)

Im Ernst: Offiziell ist das natürlich nicht richtig, was Du sagst, aber die Lösung in Dokumentenverzeichnis ist pragmatisch. Denn ich kann dem einfachen Anwender so die Möglichkeit geben, Änderungen in der Config selbst vorzunehmen oder mir die Config mal eben zu schicken. Der hat nämlich Probleme, die Datei unter AppData zu finden.

Im Zweifelsfall jedoch: AppData. Ganz klar.

baumina 21. Okt 2015 07:23

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Wenn ich bei mir in den Ordner "Dokumente" schaue, finde ich NICHTS aber echt GAR NICHTS eigenes, da ich lokal auf meinem Rechner nichts abspeichere. Stattdessen finde ich viele Verzeichnisse, die mit "Rad_Studio..." oder "Visual Studio..." beginnen.

sh17 21. Okt 2015 07:49

AW: In welches Verzeichnis Benutzerdaten speichern?
 
viele Progamme legen dann noch sowas an

C:\Users\benutzer\.AndroidStudio1.4

also unter C:\Users\benutzer\ mit einem Punkt davor

was hat das für einen Grund? Weil sie von Multiplattformen kommen?

Klaus01 21. Okt 2015 07:57

AW: In welches Verzeichnis Benutzerdaten speichern?
 
.. unter Linux/Unix sind das versteckte Dateien/Verzeichnisse.
Wie Android/IOS/OSX das handhaben weiß ich nicht.

Grüße
Klaus

Sir Rufo 21. Okt 2015 08:19

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von Klaus01 (Beitrag 1319285)
.. unter Linux/Unix sind das versteckte Dateien/Verzeichnisse.
Wie Android/IOS/OSX das handhaben weiß ich nicht.

Nun, da Android, iOS, OSX alle Linux/Unix Wurzeln haben ... genauso -> versteckt

Die Intention ist, dass dieser Eintrag versteckt sein soll. Korrekterweise sollten solche Anwendungen dann auch unter Windows das Hidden-Flag setzen, dann ist alles paletti.

hathor 21. Okt 2015 10:04

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Standard-RTL-Pfadfunktionen für alle unterstützten Zielplattformen

mm1256 21. Okt 2015 10:27

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von Dejan Vu (Beitrag 1319281)
Zitat:

Zitat von Dalai (Beitrag 1319264)
Eine Speicherung dort empfinde ich als frech. Warum? Documents ist MEIN Verzeichnis für MEINE Dokumente

Bist du wirklich so empfindlich? Nimm nen Snickers ;-)

Im Ernst: Offiziell ist das natürlich nicht richtig, was Du sagst, aber die Lösung in Dokumentenverzeichnis ist pragmatisch. Denn ich kann dem einfachen Anwender so die Möglichkeit geben, Änderungen in der Config selbst vorzunehmen oder mir die Config mal eben zu schicken. Der hat nämlich Probleme, die Datei unter AppData zu finden.

Im Zweifelsfall jedoch: AppData. Ganz klar.

Genauso sehe ich das auch. Bei diesem "Zweifelsfall" denke ich sollte man auch im Einzelfall immer den Zweck berücksichtigen. Nur mal als Beispiel: Mein Kunde muss weil er Mitglied im Einkaufsverbund von Euronics ist eine Excel-Datei mit Anschriften für die nächste Werbeaktion erstellen und an Euronics versenden. Dieses Excel-Dokument ist zwar prinzipiell temporärer Natur, weil es jederzeit aus meiner Anwendung heraus wieder erzeugt werden kann, gehört dadurch vielleicht sogar in den Temp-Ordner? Für den Kunden ist es aber vorerst einmal ein wichtiges Dokument. Also gehört es meiner Meinung nach in den Dokumenten-Pfad, obwohl das streng genommen eigentlich nicht richtig ist.

p80286 21. Okt 2015 12:01

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von mm1256 (Beitrag 1319300)
Genauso sehe ich das auch. Bei diesem "Zweifelsfall" denke ich sollte man auch im Einzelfall immer den Zweck berücksichtigen. Nur mal als Beispiel: Mein Kunde muss weil er Mitglied im Einkaufsverbund von Euronics ist eine Excel-Datei mit Anschriften für die nächste Werbeaktion erstellen und an Euronics versenden. Dieses Excel-Dokument ist zwar prinzipiell temporärer Natur, weil es jederzeit aus meiner Anwendung heraus wieder erzeugt werden kann, gehört dadurch vielleicht sogar in den Temp-Ordner? Für den Kunden ist es aber vorerst einmal ein wichtiges Dokument. Also gehört es meiner Meinung nach in den Dokumenten-Pfad, obwohl das streng genommen eigentlich nicht richtig ist.

Vielleicht bin ich ein Einzelfall, aber ich weiß wohin ich meine Daten schiebe. Vollkommen überraschend arbeite ich mit meinem Computer. Sollten irgendwelche Daten im Netz liegen muß ich mich natürlich an die entsprechenden Vorgaben halten, aber meinem Arbeitsplatz organisiere ich. Daß es Vorgaben, bzw. Einschränkungen gibt ist klar, und die sollten tunlichst nicht mit der Brechstange modifiziert werden.

Langer Rede kurzer Sinn, für alle Dateien die (Kunden)Daten enthalten, dem Kunden hierfür die Möglichkeit bieten, sie dort zu speichern, wo er sie haben will.

Gruß
K-H

Sir Rufo 21. Okt 2015 12:23

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von mm1256 (Beitrag 1319300)
Nur mal als Beispiel: Mein Kunde muss weil er Mitglied im Einkaufsverbund von Euronics ist eine Excel-Datei mit Anschriften für die nächste Werbeaktion erstellen und an Euronics versenden. Dieses Excel-Dokument ist zwar prinzipiell temporärer Natur, weil es jederzeit aus meiner Anwendung heraus wieder erzeugt werden kann, gehört dadurch vielleicht sogar in den Temp-Ordner? Für den Kunden ist es aber vorerst einmal ein wichtiges Dokument. Also gehört es meiner Meinung nach in den Dokumenten-Pfad, obwohl das streng genommen eigentlich nicht richtig ist.

Doch, da liegst du völlig richtig. Der Anwender will ja ganz bewusst diese Datei haben und vor allem will er mit dieser Datei noch etwas veranstalten.

Das gehört in den Dokumenten-Ordner bzw. einem Order den der Benutzer wählen kann (bei jedem Export oder konfigurierbar in den Benutzer-Einstellungen), wobei ich dort immer den Dokumenten-Order als Default vorbelegen würde.

Der Fall würde anders liegen, wenn du die Übertragung automatisch erledigen würdest. Dann gehört die Datei in den Temp-Ordner, Email erzeugen mit der Datei als Anhang, Email versenden und jetzt die Datei wieder löschen.

Hansa 21. Okt 2015 12:33

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von p80286 (Beitrag 1319317)
für alle Dateien die (Kunden)Daten enthalten, dem Kunden hierfür die Möglichkeit bieten, sie dort zu speichern, wo er sie haben will.

Da bin ich zu 100 % dabei. Bzw. fast. Die sollen vom Windows-Verzeichnis oder der Root die Finger weg lassen. Die Windows Empfehlung lautet allerdings tatsächlich solcherlei Daten in einem Benutzerverzeichnis abzulegen. Und dann ist man dann ungefähr im 5. Kellergeschoss gelandet. Ich bin allerdings noch jemand, der weiss was CD WINDOWS macht. Ich kenne sogar noch den \ :mrgreen: Desweiteren ist zu überlegen, wem Microsoft Empfehlungen denn nützen. Benutzerfreundlich ist das jedenfalls nicht, was die da machen/empfehlen.

mkinzler 21. Okt 2015 12:40

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Und dann ist man dann ungefähr im 5. Kellergeschoss gelandet
Zitat:

Desweiteren ist zu überlegen, wem Microsoft Empfehlungen denn nützen. Benutzerfreundlich ist das jedenfalls nicht, was die da machen/empfehlen.
Und warum nicht? Benurterspezifische daten gehören in das Benutzerverzeichnis, benutzerübergreifende in AppData oder ALL Users/Public User.

Ins Programmverzeichnis gehören sie auf keinen Fall ( wenn ich Deinen Vorschlag hier richtig deute)

Sir Rufo 21. Okt 2015 12:45

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Hmm, benutzerübergreifende Anwendungs-Daten liegen in ProgramData, benutzerbezogene Anwendungsdaten liegen in AppData (hier noch die Unterscheidung ob Local, LocalLow oder Roaming).

Die Benutzerdaten selber liegen ganz einfach im Benutzerordner abhängig vom Typ/Verwendungszweck (Bilder, Dokumente, ...)

Hansa 21. Okt 2015 13:06

AW: In welches Verzeichnis Benutzerdaten speichern?
 
Zitat:

Zitat von mkinzler (Beitrag 1319329)
wenn ich Deinen Vorschlag hier richtig deute

Deine Deutung geht ungefähr in die richtige Richtung, aber nur ungefähr.

Man stelle sich mal vor, es gäbe ein Verzeichnis C:\mkinzler und da wären auch die INIs. Warum soll denn da Windows ein Problem haben ?

Also besser so (iOS) ?
Code:
/Users/<Benutzername>/Library/Application Support/iPhone Simulator/<SDK-Version>/Applications/<Anwendungs-ID>
Für mich einfach irrwitzig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.

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