2012-06-08 9 views
78

Así que tengo un proyecto web, y estoy tratando de obtener el directorio raíz del sitio web usando el método C# Directory.GetCurrentDirectory(). No quiero usar una ruta estática ya que las ubicaciones de los archivos cambiarán en el futuro. Este método se ejecuta en mi archivo imageProcess.aspx.cs, pero en el que pensé que volvería:Obteniendo el directorio actual en la aplicación web .NET

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

Estoy en vez conseguir:

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

¿Puede alguien explicar por qué ocurre esto y qué una posible solución podría ser? Muchas gracias.

+0

Publicación relacionada [aquí] (https://stackoverflow.com/q/6041332/465053) que habla de las rutas de ejecución de la aplicación .Net en general. – RBT

+0

Otra publicación que habla sobre [rutas del mapa del servidor en aplicaciones web en .Net] (https://stackoverflow.com/q/275781/465053) – RBT

Respuesta

155

El directorio actual es una función de nivel de sistema; devuelve el directorio desde el que se inició el servidor. No tiene nada que ver con el sitio web.

Quiere HttpRuntime.AppDomainAppPath.

Si tiene una solicitud HTTP, también puede llamar al Server.MapPath("~/Whatever").

+0

Gracias. En realidad estaba buscando 'HttpRuntime.BinDirectory', pero eso fue fácil de determinar en el depurador, una vez que probé lo que mencionaste en tu respuesta. –

+0

Si uso 'Server.MapPath (" ~ Whatever ") y el sitio de IIS está alojado en http: // myserver. Obtengo una C: \\ somefolder \ Whatever, en lugar de http: // myserver/Whatever folder. – Si8

+0

@ Si8: Sí; eso es lo que hace 'Server.MapPath'. Desea http://stackoverflow.com/q/5823847/34397 – SLaks

71

Usar este código:

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

referencia detallada:

Server.MapPath especifica la ruta relativa o virtual para asignar a un directorio físico.

  • Server.MapPath(".") devuelve el directorio actual física del archivo (por ejemplo aspx) que se está ejecutando
  • Server.MapPath("..") devuelve el directorio padre
  • Server.MapPath("~") devuelve la ruta de acceso física a la raíz de la aplicación
  • Server.MapPath("/") retornos la ruta física a la raíz del nombre de dominio (no es necesariamente la misma que la raíz de la aplicación )

Un ejemplo:

Digamos que usted ha señalado una aplicación de sitio web (http://www.example.com/) a

C:\Inetpub\wwwroot 

y instalado la aplicación tienda (sub web como directorio virtual en IIS, marcado como la aplicación) en

D:\WebApps\shop 

Por ejemplo, si se llama en Server.MapPath petición siguiente:

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

entonces:

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 comienza ya sea con una diagonal (/) o de barra hacia atrás(), el método MapPath devuelve una ruta como si Path fuera una ruta completa, virtual.

Si la ruta de acceso no comienza con una barra inclinada, el método MapPath devuelve una ruta relativa al directorio de la solicitud que se está procesando.

Nota: en C#, @ es el operador de cadena literal literal, lo que significa que la cadena se debe usar "tal cual" y no se debe procesar para las secuencias de escape.

Notas al pie

Server.MapPath(null) y Server.MapPath("") producirá este efecto también.

+0

¡Perfecto! Justo lo que estaba buscando ... –

+4

Copia perfecta de https://stackoverflow.com/questions/275781/server-mappath-server-mappath-server-mappath-server-mappath#275791 – GGO

Cuestiones relacionadas