2010-05-06 23 views
12

Tengo un archivo XML llamado PageData.xml en mi carpeta App_Data. Quiero llenar un XDocument con este archivo usando XDocument.Load.¿Cómo uso una ruta relativa en XDocument.Load?

Si Puedo proporcionar la ruta completa física funciona, es decir .:

XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml"); 

... donde "trabajo" es una carpeta de mi unidad C:.

Si intento una ruta relativa de este tipo, sin embargo, me siento un DirectoryNotFoundException:

XDocument vXDoc = XDocument.Load("AppData/PageData.xml"); 

"No se pudo encontrar una parte de la ruta 'C: \ Archivos de programa (x86) \ Archivos comunes \ Microsoft Shared \ DevServer \ 10.0 \ AppData \ PageData.xml '. "

Esto es obviamente incorrecto, pero debe haber una manera fácil de establecer la ruta relativa correcta? ¿Qué estoy pasando por alto? Tu ayuda es apreciada.

Respuesta

21

Hay un par de formas en que puede hacerlo. Puede utilizar Server.MapPath() para convertir un directorio virtual en una ruta de directorio físico:

XDocument xdoc = XDocument.Load(Server.MapPath("/App_Data/PageData.xml")); 

o puede utilizar Request.PhysicalApplicationPath, así, de este modo:

var path = Path.Combine(Request.PhysicalApplicationPath, "App_Data\\PageData.xml"); 
XDocument xdoc = XDocument.Load(path); 

En cualquier caso, el problema es que la corriente el directorio de trabajo del proceso de trabajo generalmente es no establecido en el directorio de la aplicación (esto es porque el directorio de trabajo es una propiedad de todo el proceso, y un solo proceso puede alojar varios sitios web). More information is here.

+4

Muchas gracias por su pronta respuesta. Su primera sugerencia no funciona para mí "tal cual", pero si agrego un '~' a la ruta, funciona perfectamente, es decir: XDocument xdoc = XDocument.Load (Server.MapPath ("~/App_Data/PageData .xml ")); Muchas gracias por su ayuda. – PaulC

+1

Esto parece ser algo de IIS6, y estoy usando IIS7. – zeristor

Cuestiones relacionadas