web-dev-qa-db-fra.com

Différence entre 'SpecialFolder.LocalApplicationData' et 'SpecialFolder.ApplicationData'?

Sur mon système, %AppData% conduit à ApplicationData qui est C:\Users\<USER>\AppData\Roaming

Mais il y a aussi C:\Users\<USER>\AppData\Local
Et pour encore plus de confusion D:\Users\<USER>\AppData\LocalLow

string local = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string roaming = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

Ma question est la suivante: dans quels emplacements mon application doit-elle enregistrer ses données?

Existe-t-il des directives pour lesquels de ces emplacements utiliser? Et est-ce que je me laisse ouvert à des problèmes si je choisis le mauvais endroit?

42
Tarion

Le dossier Roaming est copié entre les machines lorsque les profils itinérants sont activés (dans un environnement de domaine). Utilisez-le pour les données d'application que vous souhaitez partager entre les machines. Mais ne stockez pas de fichiers volumineux là-dedans - les services informatiques n'aiment pas cela lorsque vous faites cela, et cela augmente le temps nécessaire à l'utilisateur pour se connecter et se déconnecter lorsque les fichiers sont copiés.

Le dossier Local n'est pas copié entre les machines. Utilisez-le pour les données d'application spécifiques à une machine.

Le dossier LocalLow est utilisé pour les tâches à faible privilège (comme Internet Explorer). Vous ne devriez pas avoir à vous en préoccuper.

Pour les fichiers que l'utilisateur a spécifiquement enregistrés, vous devez les placer (par défaut) dans le dossier Documents.

53
Roger Lipscombe

Selon MSDN la différence est que LocalApplicationData reste sur la machine locale et ne se déplace pas ... ApplicationData se déplace par exemple, si l'utilisateur se connecte au domaine à partir d'un autre ordinateur, il sera synchronisé ...

Le LocalLow fait référence à des situations spécifiques comme un BHO fonctionnant en "Mode protégé" d'IE ...

Pour une application standard, utilisez toujours ApplicationData. Utilisez LocalApplicationData pour les choses qui ne devraient PAS errer avec l'utilisateur ...

9
Yahia

Depuis MSDN - énumération Environment.SpecialFolder :

ApplicationData - Le répertoire qui sert de référentiel commun pour les données spécifiques à l'application pour l'utilisateur itinérant actuel. Un utilisateur itinérant travaille sur plusieurs ordinateurs d'un réseau. Le profil d'un utilisateur itinérant est conservé sur un serveur du réseau et est chargé sur un système lorsque l'utilisateur se connecte.

LocalApplicationData Le répertoire qui sert de référentiel commun pour les données spécifiques à l'application utilisées par l'utilisateur actuel non itinérant.

En bref, utilisez ApplicationData pour les profils itinérants et LocalApplicationData pour les profils non itinérants.

5
Oded