C# obtenir le chemin de % AppData%

C # 2008 SP1

J'utilise le code ci-dessous:

dt.ReadXml("%AppData%\DateLinks.xml");

Cependant, je reçois une exception qui pointe vers l'emplacement de l'exécution de mon application:

Impossible de trouver une partie du chemin 'D:ProjectsSubVersionProjectsCatDialerbinDebug%AppData%DateLinks.xml".

Je pensais que le {[1] } devrait trouver le chemin relatif. Quand je vais Start|Run|%AppData% l'Explorateur windows m'emmène dans ce répertoire.

Je ne peux pas mettre le chemin complet, comme l'utilisateur est différent sur chaque machine cliente.

Merci Beaucoup pour tous les conseils,

319
demandé sur jarlh 2009-05-15 12:00:59

8 réponses

Pour obtenir le répertoire AppData , Il est préférable d'utiliser la méthode GetFolderPath:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

%AppData% est une variable d'environnement, et ils ne sont pas automatiquement développés n'importe où dans. NET, bien que vous puissiez Environment.ExpandEnvironmentVariable méthode pour le faire. Cependant, je vous suggère fortement d'utiliser GetFolderPath, car comme le souligne Johannes Rössel dans le Commentaire, %AppData% peut ne pas être défini dans certaines circonstances.

Enfin, pour créer le chemin comme indiqué dans votre exemple:

var fileName = Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.ApplicationData), "DateLinks.xml");
683
répondu Noldorin 2017-04-19 23:13:19

Le chemin est différent si vous parlez ASP.NET.

Je n'ai trouvé aucune des valeurs 'SpecialFolder' pointant vers / App_Data pour ASP.NET.

Au Lieu de cela, vous devez faire ceci:

 HttpContext.Current.ApplicationInstance.Server.MapPath("~/App_Data")  

(Note: vous n'avez pas besoin de la propriété 'Current' dans un contrôleur MVC)

S'il y a une autre façon plus "abstraite" d'arriver à {[1] } aimerait entendre comment.

46
répondu Simon_Weaver 2009-07-27 10:14:09

Le MEILLEURS façon d'utiliser le répertoire AppData, EST utiliser Environment.ExpandEnvironmentVariable la méthode.

Raisons:

  • Il remplace des parties de votre chaîne par des répertoires valides ou autre
  • , il est insensible à la casse
  • c'est facile et simple
  • c'est une norme
  • bon pour traiter l'entrée de l'utilisateur

Exemples:

string path;
path = "%AppData%\stuff";
path = "%aPpdAtA%\HelloWorld";
path = "%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths

path = Environment.ExpandEnvironmentVariables(path);
Console.WriteLine(path);

Rappelez-vous que certains utilisateurs tapent %AppData%, Certains %appdata% et certains %APpData% Vous ne voulez pas finir avec:

if (path.ToLower().StartsWith("%appdata%"))
    ; // path manipulation
if (path.ToLower().StartsWith("%programfiles%"))
    ; // path manipulation

Si la variable d'environnement n'est pas définie, il n'est pas de votre faute (d'ailleurs quand il EST). Habituellement, Je ne dis pas aux gens dePas réinventer la roue, mais après que je suis allé dans l'autre sens et que j'ai réalisé que c'était une mauvaise idée.

26
répondu Bitterblue 2013-06-14 12:29:45

Vous pouvez également utiliser

Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");

Pour développer la variable %AppData%.

20
répondu parapet 2013-01-23 11:07:00

Dans .net2.0 vous pouvez utiliser la variable Application.UserAppDataPath

13
répondu Nathan 2010-04-08 12:03:34

Je ne pense pas que mettre %AppData% dans une chaîne comme celle-ci fonctionnera.

Essayez

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
6
répondu danswain 2009-05-15 08:06:08

Je voulais juste partager une autre façon d'accéder au dossier 'App_Data' dans mon application mvc au cas où quelqu'un en aurait besoin.

 Path.Combine(HttpRuntime.AppDomainAppPath,"App_Data")
3
répondu cpoDesign 2017-02-23 20:01:32

Cela fonctionne pour moi dans une application console -

string appData = System.Environment.GetEnvironmentVariable("APPDATA");
1
répondu Bill 2018-03-27 23:37:00