2010-05-06 19 views
12

Ho un file XML denominato PageData.xml nella mia cartella App_Data. Voglio popolare un XDocument con questo file usando XDocument.Load.Come utilizzare un percorso relativo in XDocument.Load?

Se fornisco il percorso completo fisico funziona, cioè .:

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

... dove "Work" è una cartella sul mio C: azionamento.

Se provo un percorso relativo come questo, però, ho un DirectoryNotFoundException:

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

"Impossibile trovare una parte del percorso 'C: \ Program Files (x86) \ File comuni \ Microsoft Shared \ devserver \ 10.0 \ AppData \ PageData.xml'."

Questo è ovviamente sbagliato, ma ci deve essere un modo semplice per impostare il percorso relativo corretto? Cosa sto trascurando? Il tuo aiuto è apprezzato.

risposta

21

Ci sono un paio di modi in cui puoi farlo. È possibile utilizzare Server.MapPath() per trasformare una directory virtuale in un percorso di directory fisica:

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

oppure è possibile utilizzare Request.PhysicalApplicationPath così, in questo modo:

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

In entrambi i casi, il problema è che l'attuale la directory di lavoro del processo di lavoro è in genere non impostata sulla directory dell'applicazione (poiché la directory di lavoro è una proprietà a livello di processo e un singolo processo può ospitare più siti Web). More information is here.

+4

Grazie mille per la vostra pronta risposta. Il tuo primo suggerimento non funziona per me "così com'è", ma se aggiungo un '~' al percorso funziona perfettamente, ad esempio: XDocument xdoc = XDocument.Load (Server.MapPath ("~/App_Data/PageData .xml ")); Molte grazie per il vostro aiuto. – PaulC

+1

Questa sembra essere una cosa IIS6, e sto usando IIS7. – zeristor

Problemi correlati