web-dev-qa-db-fra.com

Obtenir le répertoire actuel dans l'application Web .NET

J'ai donc un projet Web et j'essaie d'obtenir le répertoire racine du site Web à l'aide de la méthode c # Directory.GetCurrentDirectory(). Je ne veux pas utiliser un chemin statique car les emplacements des fichiers changeront à l'avenir. Cette méthode est en cours d’exécution dans mon fichier imageProcess.aspx.cs, mais je pensais qu’elle renverrait:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

Je reçois plutôt:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

Quelqu'un peut-il expliquer pourquoi cela se produit et quelle solution possible pourrait être? Merci beaucoup.

99
Julian Coltea

Le répertoire en cours est une fonctionnalité au niveau du système; il renvoie le répertoire à partir duquel le serveur a été lancé. Cela n'a rien à voir avec le site web.

Vous voulez HttpRuntime.AppDomainAppPath.

Si vous êtes dans une requête HTTP, vous pouvez également appeler Server.MapPath("~/Whatever").

198
SLaks

Utilisez ce code:

 HttpContext.Current.Server.MapPath("~")

Référence détaillée:

Server.MapPath spécifie le chemin relatif ou virtuel à associer à un répertoire physique.

  • Server.MapPath(".") renvoie le répertoire physique actuel du fichier (par exemple, aspx) en cours d'exécution
  • Server.MapPath("..") renvoie le répertoire parent
  • Server.MapPath("~") renvoie le chemin physique à la racine de l'application
  • Server.MapPath("/") renvoie le chemin d'accès physique à la racine du nom de domaine (n'est pas nécessairement identique à la racine de l'application)

Un exemple:

Supposons que vous pointiez une application de site Web ( http://www.example.com/ ) sur

C:\Inetpub\wwwroot

et installé votre application de magasin (sous-site Web en tant que répertoire virtuel dans IIS, marqué en tant qu’application) dans

D:\WebApps\shop

Par exemple, si vous appelez Server.MapPath dans la requête suivante:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

ensuite:

Server.MapPath(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

Si Path commence par une barre oblique (()) ou inversée (), la méthode MapPath renvoie un chemin comme si Path était un chemin virtuel complet.

Si Path ne commence pas par une barre oblique, la méthode MapPath renvoie un chemin relatif au répertoire de la demande en cours de traitement.

Remarque: en C #, @ est l'opérateur de chaîne littérale mot à mot qui signifie que la chaîne doit être utilisée "telle quelle" et ne pas être traitée pour les séquences d'échappement.

Notes de bas de page

Server.MapPath(null) et Server.MapPath("") produiront également cet effet.

98
Harshal Doshi Jain