Ich habe also ein Webprojekt und versuche, das Stammverzeichnis der Website mithilfe der c # -Methode abzurufen Directory.GetCurrentDirectory()
. Ich möchte keinen statischen Pfad verwenden, da sich die Speicherorte der Dateien in Zukunft ändern werden. Diese Methode wird in meiner Datei imageProcess.aspx.cs ausgeführt, aber wo ich dachte, dass sie zurückkehren würde:
C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs
Ich bekomme stattdessen:
C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\
Kann jemand erklären, warum dies geschieht und was eine mögliche Lösung sein könnte? Vielen Dank.
Antworten:
Das aktuelle Verzeichnis ist eine Funktion auf Systemebene. Es gibt das Verzeichnis zurück, aus dem der Server gestartet wurde. Es hat nichts mit der Website zu tun.
Du willst
HttpRuntime.AppDomainAppPath
.Wenn Sie sich in einer HTTP-Anfrage befinden, können Sie auch anrufen
Server.MapPath("~/Whatever")
.quelle
HttpRuntime.BinDirectory
, aber das war im Debugger leicht festzustellen, als ich versuchte, was Sie in Ihrer Antwort erwähnt haben.Server.MapPath
macht. Sie wollen stackoverflow.com/q/5823847/34397System.Web.HttpRuntime.AppDomainAppPath
System.Web.HttpRuntime.HttpContext.Server.MapPath("~")
HttpContext
istSystem.Web.HttpContext.Current.Server.MapPath("~")
, nicht habenHttpRuntime
Verwenden Sie diesen Code:
Detaillierte Referenz:
Server.MapPath
Gibt den relativen oder virtuellen Pfad an, der einem physischen Verzeichnis zugeordnet werden soll.Server.MapPath(".")
Gibt das aktuelle physische Verzeichnis der ausgeführten Datei (z. B. aspx) zurückServer.MapPath("..")
Gibt das übergeordnete Verzeichnis zurückServer.MapPath("~")
Gibt den physischen Pfad zum Stammverzeichnis der Anwendung zurückServer.MapPath("/")
Gibt den physischen Pfad zum Stammverzeichnis des Domänennamens zurück (muss nicht unbedingt mit dem Stammverzeichnis der Anwendung identisch sein).Ein Beispiel:
Angenommen, Sie haben auf eine Website-Anwendung ( http://www.example.com/ ) verwiesen
und installierte Ihre Shop-Anwendung (Sub-Web als virtuelles Verzeichnis in IIS, als Anwendung markiert) in
Zum Beispiel, wenn Sie
Server.MapPath
folgende Anfrage anrufen :dann:
Wenn Path entweder mit einem Schrägstrich vorwärts (/) oder rückwärts () beginnt, gibt die
MapPath
Methode einen Pfad zurück, als wäre Path ein vollständiger virtueller Pfad.Wenn Path nicht mit einem Schrägstrich beginnt, gibt die
MapPath
Methode einen Pfad relativ zum Verzeichnis der zu verarbeitenden Anforderung zurück.Hinweis: In C # ist @ der wörtliche wörtliche Zeichenfolgenoperator. Dies bedeutet, dass die Zeichenfolge "wie sie ist" verwendet und nicht für Escape-Sequenzen verarbeitet werden sollte.
Fußnoten
Server.MapPath(null)
undServer.MapPath("")
wird diesen Effekt auch erzeugen.quelle
System.Web.Hosting.HostingEnvironment.MapPath("~")
stattdessen getan , was großartig funktioniert, ohne Abhängigkeit vonSystem.Web.HttpContext.Current