54 votes

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

Quel est l'emplacement recommandé pour enregistrer les fichiers de préférences des utilisateurs ? Existe-t-il une méthode recommandée pour traiter les préférences des utilisateurs ?

Actuellement, j'utilise le chemin renvoyé par 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 connexes/intéressantes :

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

70voto

Sailing Judo Points 4121

Vous pouvez utiliser les paramètres de l'application assez facilement.

Si vous ne l'avez pas encore fait, faites un clic droit sur le projet et choisissez Propriétés. Sélectionnez l'onglet Paramètres. Assurez-vous de choisir "Utilisateur" pour l'étendue (sinon le paramètre est en lecture seule).

Le code pour y accéder est simple :

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

Si vous devez le sauvegarder :

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

Dans l'exemple ci-dessus, Width est le nom du paramètre personnalisé que vous définissez dans l'onglet Settings et Application1 est le Namespace de votre application.

Edit : Répondre à d'autres questions

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

Vous avez quelques liens qui brouillent un peu la situation. Votre question initiale est de savoir où enregistrer les "fichiers de préférences de l'utilisateur". Je suis presque certain que l'intention de Microsoft avec la fonctionnalité Paramètres est exactement cela... stocker les préférences de l'utilisateur en matière d'habillage, les choix de mise en page, etc. Il ne s'agit pas d'un dépôt générique pour les données d'une application, bien que l'on puisse facilement en abuser.

Les données sont stockées dans des endroits séparés pour une bonne raison. Certains des paramètres sont des paramètres d'application et sont en lecture seule. Il s'agit de paramètres dont l'application a besoin pour fonctionner mais qui ne sont pas spécifiques à un utilisateur (par exemple, les URI des ressources de l'application ou peut-être un taux d'imposition). Ils sont stockés dans le fichier app.config.

Les paramètres de l'utilisateur sont stockés dans un répertoire obscurci situé au cœur du dossier User Document/Settings. Les paramètres par défaut sont stockés dans app.config (je pense, je ne me souviens pas avec certitude) mais toute modification apportée par l'utilisateur est stockée dans son dossier personnel. Ceci est destiné aux données qui changent d'utilisateur en utilisateur. (Par "utilisateur", j'entends l'utilisateur de Windows, pas l'utilisateur de votre application).

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

27voto

Nir Points 18250

Lorsque vous vous exécutez en tant que non-administrateur ou sous Vista, vous ne pouvez pas écrire dans le dossier "Program files" (ou tout autre sous-dossier de celui-ci).

L'emplacement correct pour stocker les préférences de l'utilisateur est (remplacez MonNomDeSociété et MonNomD'Application par les noms corrects, évidemment)

Sur le 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 fonctionnent avec un utilisateur non administrateur, plusieurs utilisateurs utilisant le même ordinateur, le changement rapide d'utilisateur, les services de terminal et toutes les autres façons dont les gens peuvent interagir avec votre logiciel.

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

  1. Cela ne fonctionnera que si l'utilisateur est un administrateur.
  2. Il ne fonctionnera pas de manière fiable sur Vista
  3. Vous devez vous occuper de tout vous-même (par exemple, deux utilisateurs qui exécutent l'application sur le même ordinateur en même temps via un changement d'utilisateur rapide).

et les lieux sont :

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

Ou dans le registre sous la clé :

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName

3voto

Muad'Dib Points 14260

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

Introduction au stockage isolé
http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

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

1voto

Anne Points 21

La solution suivante semble être la meilleure :

Application.UserAppDataPath

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X