WPF / C#: Où dois-je enregistrer les fichiers de préférences des utilisateurs?

Quel est l'emplacement recommandé pour enregistrer les fichiers de préférences de l'utilisateur? Est-il une méthode recommandée pour traiter les préférences de l'utilisateur?

J'utilise actuellement le chemin retourné de typeof(MyLibrary).Assembly.Location comme emplacement par défaut pour stocker les fichiers générés ou requis par l'application.

EDIT: J'ai trouvé deux questions liées/intéressantes:

EDIT #2: Ce n'est qu'une note pour des gens comme moi qui n'avaient jamais utilisé de réglages auparavant. Les réglages sont assez utiles, mais j'ai dû faire un tas de recherches pour comprendre ce qui se passait (venant du monde Python, pas quelque chose que je suis utilisé aussi). Les choses se sont compliquées car je voulais sauver des dictionnaires et apparemment ils ne peuvent pas être sérialisé. Les paramètres semblent aussi être stockés dans 3 fichiers différents selon ce que vous faites. Il y a un fichier app.config , user.config et un fichier settings.setting . Voici donc deux autres liens que j'ai trouvé utiles:

52
demandé sur Community 2008-12-28 17:51:36

4 réponses

vous pouvez utiliser les paramètres de L'Application assez facilement.

si vous ne l'avez pas fait avant juste le clic droit sur le projet et choisissez des propriétés. Sélectionnez l'onglet Paramètres. Assurez-vous de choisir "User" pour le scope (sinon le paramètre est en lecture seule).

le code d'accès est simple:

forms.Width = Application1.Properties.Settings.Default.Width;

si vous avez besoin de le sauvegarder:

Application1.Properties.Settings.Default.Width = forms.Width;
Application1.Properties.Settings.Default.Save();

dans l'échantillon ci-dessus, la largeur est la définir le nom que vous définissez dans L'onglet Paramètres et Application1 est l'espace de nom de votre application.

Edit: répondre à d'autres questions

vous avez mentionné que vous vouliez stocker des objets dictionnaires dans les paramètres. Comme vous l'avez découvert, vous ne pouvez pas le faire directement parce que les objets du dictionnaire ne sont pas sérialisables. Cependant, vous pouvez créer votre propre dictionnaire sérialisable assez facilement. Paul Welzer avait un excellent exemple sur son blog .

vous avez quelques liens qui brouillent un peu la situation. Votre question originale est où sauvegarder "les fichiers de préférences de L'utilisateur". Je suis assez certain que L'intention de Microsoft avec la fonctionnalité paramètres est exactement cela... stockage des préférences de peau de l'Utilisateur, des choix de mise en page, etc. Il ne s'agissait pas d'un dépôt générique pour les données d'une application, bien qu'il puisse être facilement exploité de cette façon.

les données sont stocké dans des endroits séparés pour une bonne raison. Certains paramètres sont des paramètres D'Application et sont en lecture seule. Ce sont des paramètres dont l'application a besoin pour fonctionner, mais n'est pas spécifique à un utilisateur (par exemple, URIs à ressources app ou peut-être un taux d'imposition). Celles-ci sont stockées dans l'application.config.

les paramètres D'utilisateur sont stockés dans un répertoire caché au plus profond du dossier Document/paramètres D'utilisateur. Les valeurs par défaut sont stockées dans l'application.config (je pense, pas de rappel pour certains hors de la du haut de ma tête) mais toutes les modifications de l'utilisateur sont stockées dans leur dossier personnel. Ceci est destiné aux données qui changent d'Utilisateur En utilisateur. (Par "utilisateur" je veux dire L'utilisateur de Windows, pas l'utilisateur de votre application.)

J'espère que ceci a clarifié quelque peu ceci pour vous. Le système est en fait assez simple. Cela peut sembler un peu étranger au début, mais après quelques jours d'utilisation, vous n'aurez jamais à penser à nouveau... il fonctionne, tout simplement.

68
répondu Sailing Judo 2008-12-29 15:29:47

lors de l'exécution en tant que non-administrateur ou sur Vista, vous ne pouvez pas écrire dans le dossier" Program files " (ou dans n'importe quel sous-dossier).

l'emplacement correct pour stocker la préférence de l'utilisateur est (Remplacer Myentrepryname et MyApplicationName par les noms corrects, évidemment)

sur disque:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\MyCompanyName\MyApplicationName"

Ou dans le registre sous la clé:

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

ces emplacements sont par utilisateur et ils travaillent avec l'utilisateur non-administrateur, plusieurs utilisateurs utilisant le même ordinateur, le changement rapide d'utilisateur, les services de terminal et tous les autres moyens les gens peuvent interagir avec votre logiciel.

si vous avez besoin d'un emplacement commun pour tous les utilisateurs alors:

  1. , Il ne fonctionnera que lorsque l'utilisateur d'exécuter en tant qu'administrateur
  2. il ne fonctionnera pas de façon fiable sur Vista
  3. Vous devez prendre soin de tout vous-même (comme deux utilisateurs d'exécuter l'application sur le même ordinateur en même temps via le changement rapide d'utilisateur).

et les emplacements sont:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\MyCompanyName\MyApplicationName"

Ou dans le registre sous la clé:

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName
27
répondu Nir 2008-12-28 15:55:48

, Vous pouvez utiliser le stockage isolé. Vous pouvez isoler par utilisateur, assemblage et / ou domaine.

Introduction au stockage isolé

http://msdn.microsoft.com/en-us/library/3ak841sy (VS.80).aspx

types d'Isolation

http://msdn.microsoft.com/en-us/library/eh5d60e1 (VS.80).aspx

3
répondu Muad'Dib 2011-03-15 02:28:47

semble être la meilleure option:

Application.UserAppDataPath
1
répondu Anne 2010-08-02 14:19:45