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.
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")
.
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écutionServer.MapPath("..")
renvoie le répertoire parentServer.MapPath("~")
renvoie le chemin physique à la racine de l'applicationServer.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.