J'ai donc un projet Web et j'essaie d'obtenir le répertoire racine du site Web en utilisant la méthode c # Directory.GetCurrentDirectory()
. Je ne veux pas utiliser de chemin statique car les emplacements des fichiers changeront à l'avenir. Cette méthode s'exécute dans mon fichier imageProcess.aspx.cs, mais là où je pensais qu'elle reviendrait:
C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs
Je reçois à la place:
C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\
Quelqu'un peut-il expliquer pourquoi cela se produit et quelle pourrait être une solution possible? Merci beaucoup.
Réponses:
Le répertoire actuel 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.
Tu veux
HttpRuntime.AppDomainAppPath
.Si vous êtes dans une requête HTTP, vous pouvez également appeler
Server.MapPath("~/Whatever")
.la source
HttpRuntime.BinDirectory
, mais c'était facile à déterminer dans le débogueur, une fois que j'ai essayé ce que vous avez mentionné dans votre réponse.Server.MapPath
fait. Vous voulez stackoverflow.com/q/5823847/34397System.Web.HttpRuntime.AppDomainAppPath
etSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
HttpContext
isSystem.Web.HttpContext.Current.Server.MapPath("~")
, not haveHttpRuntime
Utilisez ce code:
Référence détaillée:
Server.MapPath
spécifie le chemin d'accès relatif ou virtuel à mapper vers 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 vers la racine de l'applicationServer.MapPath("/")
renvoie le chemin physique vers la racine du nom de domaine (n'est pas nécessairement le même que la racine de l'application)Un exemple:
Supposons que vous ayez dirigé une application de site Web ( http://www.example.com/ ) vers
et installé votre application de boutique (sous-site Web comme répertoire virtuel dans IIS, marqué comme application) dans
Par exemple, si vous appelez
Server.MapPath
dans la demande suivante:puis:
Si Path commence par une barre oblique avant (/) ou arrière (), la
MapPath
méthode renvoie un chemin comme si Path était un chemin virtuel complet.Si Path ne commence pas par une barre oblique, la
MapPath
méthode retourne un chemin relatif au répertoire de la requête en cours de traitement.Remarque: en C #, @ est l'opérateur de chaîne littérale verbatim signifiant 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)
etServer.MapPath("")
produira également cet effet.la source
System.Web.Hosting.HostingEnvironment.MapPath("~")
place, ce qui fonctionne très bien, sans dépendre deSystem.Web.HttpContext.Current