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 d'où mon application est exécutée:
Impossible de trouver une partie du chemin "D:\Projects\SubVersionProjects\CatDialer\bin\Debug \% AppData%\DateLinks.xml".
Je pensais que le %AppData%
devrait trouver le chemin relatif. Quand je vais Start|Run|%AppData%
Windows Explorer m'amène à ce répertoire.
Je ne peux pas mettre le chemin complet, car l'utilisateur est différent sur chaque ordinateur client.
Pour obtenir le répertoire AppData , il est préférable d'utiliser la méthode GetFolderPath
:
_Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
_
(doit ajouter _using System
_ s'il n'est pas présent).
_%AppData%
_ est une variable d'environnement et elles ne sont pas développées automatiquement dans .NET, bien que vous puissiez utiliser explicitement la méthode Environment.ExpandEnvironmentVariable
pour le faire. Je suggérerais néanmoins fortement que vous utilisiez GetFolderPath
cependant, 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 d'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")
(Remarque: vous n'avez pas besoin de la propriété 'Current' dans un contrôleur MVC)
S'il existe un autre moyen plus abstrait de se rendre à App_Data
aimerait savoir comment.
Le meilleur moyen _ d'utiliser le répertoire AppData, EST à utiliser Environment.ExpandEnvironmentVariable
méthode.
Les raisons:
Exemples:
_string path;
path = @"%AppData%\stuff";
path = @"%aPpdAtA%\HelloWorld";
path = @"%progRAMfiLES%\Adobe;%appdata%\FileZilla"; // collection of paths
path = Environment.ExpandEnvironmentVariables(path);
Console.WriteLine(path);
_
N'oubliez pas que certains utilisateurs saisissent _%AppData%
_, certains _%appdata%
_ et certains _%APpData%
_. Vous ne voulez pas en arriver à:
_if (path.ToLower().StartsWith("%appdata%"))
; // path manipulation
if (path.ToLower().StartsWith("%programfiles%"))
; // path manipulation
_
Si la variable d'environnement n'est pas définie, ce n'est pas votre faute (à part quand EST). D'habitude, je ne dis pas aux gens de pas de réinventer la roue, mais après je suis allé dans l'autre sens et j'ai réalisé que c'était une mauvaise idée.
Vous pouvez aussi utiliser
Environment.ExpandEnvironmentVariables("%AppData%\\DateLinks.xml");
pour développer la variable %AppData%
.
En .net2.0, vous pouvez utiliser la variable Application.UserAppDataPath
Je ne pense pas que mettre% AppData% dans une chaîne comme celle-là fonctionnera.
essayer
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()
Je voulais simplement partager un autre moyen 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")
Pour ASP.NET, le paramètre Load User Profile
doit être défini sur le pool d'applications, mais cela ne suffit pas. Il y a un paramètre caché nommé setProfileEnvironment
dans \Windows\System32\inetsrv\Config\applicationHost.config
, qui est désactivé pour une raison quelconque par défaut, au lieu d'être activé comme décrit dans la documentation . Vous pouvez modifier la valeur par défaut ou la définir sur votre pool d'applications. Toutes les méthodes de la classe Environment
renverront alors les valeurs appropriées.
Cela fonctionne pour moi dans une application console -
string appData = System.Environment.GetEnvironmentVariable("APPDATA");