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,
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");
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.
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.
Vous pouvez également utiliser
Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
Pour développer la variable %AppData%
.
Dans .net2.0 vous pouvez utiliser la variable Application.UserAppDataPath
Je ne pense pas que mettre %AppData% dans une chaîne comme celle-ci fonctionnera.
Essayez
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
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")
Cela fonctionne pour moi dans une application console -
string appData = System.Environment.GetEnvironmentVariable("APPDATA");