2009-01-31 6 views
12

Il y a plusieurs façons d'obtenir le chemin vers le répertoire de données d'application:Le meilleur moyen d'obtenir le chemin vers le répertoire "Application Data"?

  • en utilisant la variable d'environnement %APPDATA%
  • appelant SHGetFolderPath avec CSIDL_APPDATA

Quelle est la meilleure façon d'obtenir le chemin à partir d'un programme? Y a-t-il des pièges lorsque j'utilise la variable d'environnement?

Quelle méthode est la plus sûre entre XP, Vista et les versions à venir?

Répondre

12

Je suggère que l'appel SHGetFolderPath() est la méthode la plus appropriée et portable; les alternatives, telles que lire une variable d'environnement, ou (pire) essayer de l'extraire du registre sont susceptibles de vous trébucher à l'avenir.

Raymond Chen has an article Expliquer pourquoi l'extraction de ces chemins du registre est une mauvaise idée.

+1

J'ai lu l'article, et je l'ai déjà je l'ai fait exactement ce que l'article m'a dit * pas * faire :) –

0

Si vous programmez en .NET, vous pouvez utiliser ceci:

string appDataPath = Environment.SpecialFolder.ApplicationData; 
+0

SpecialFolder.ApplicationData est une énumération, pas un chemin. Utilisez Environment.GetFolderPath comme indiqué dans la réponse de @ jMM – JulianM

0

Une différence importante en Python: en cas de chemins de fichiers unicode ctypes.windll.shell32.SHGetFolderPathW renvoie une chaîne unicode, alors que os.environ['APPDATA'] retourne une chaîne d'octets.

12
string appDataPath = 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

Vous aurez besoin d'utiliser la méthode GetFolderPath obtenir le chemin réel Environment.SpecialFolder.ApplicationData est juste un ENUM.

0

au cas où quelqu'un se demandait, en Ruby la commande ressemblerait à ce qui suit:

appDataPath = ENV['APPDATA']