2009-04-30 20 views
7

Estoy leyendo un archivo xml y quiero hacerlo desde un directorio relativo basado en la ubicación de la aplicación, similar a ASP.NET con Server.MapPath o usando la tilda.¿Cómo cargar desde la ruta relativa en la aplicación WPF?

¿Cómo se puede obtener la ruta relativa en WPF?

WORKS: XDocument xmlDoc = XDocument.Load(@"c:\testdata\customers.xml"); 
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~\Data\customers.xml"); 
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~/Data/customers.xml"); 

Respuesta

7
XDocument xmlDoc = XDocument.Load(@"Data\customers.xml"); 

O

XDocument xmlDoc = XDocument.Load(@".\Data\customers.xml"); 

Por cierto, esto no tiene nada que ver con WPF y todo lo relacionado con rutas de Windows.

+0

hmmm, ninguna de esas parece funcionar, tengo el archivo customers.xml en "Copiar al directorio de salida = Copiar siempre", ¿hay alguna otra sugerencia? –

+0

Sugiero Environment.CurrentDirectory es lo que espera, y realmente asegurando que el archivo Customers.xml está donde espera en la salida. –

+0

string directory = System.IO.Directory.GetCurrentDirectory(); –

15
XDocument xmlDoc = XDocument.Load(
    Path.Combine(
     AppDomain.CurrentDomain.BaseDirectory, 
     @"Data\customers.xml")); 

que asumen el directorio Data se va a poner desplegado con su aplicación, en el mismo directorio raíz que el archivo EXE. Esto generalmente es seguro, excepto cuando se trata de copia oculta; por ejemplo, cuando usa NUnit para probar este código. (Con la copia oculta, los ensamblajes que conforman su aplicación se copian en un directorio temporal, pero los archivos como este se quedan atrás).

Suponiendo que no está planeando modificar customers.xml después del despliegue, la forma más segura de manejar esto es incrustar el archivo como un recurso dentro de su conjunto.

0

Pruebe File.Create("./HiImHere.txt") para ver dónde está el directorio de puntos; después de eso, prueba la ruta relativa a donde está HiImHere.txt.

+1

¿Por qué el voto a favor? –

Cuestiones relacionadas