简体   繁体   中英

How do I use a relative path in XDocument.Load?

I have an XML file named PageData.xml in my App_Data folder. I want to populate an XDocument with this file using XDocument.Load.

If I supply the full physical path it works, ie:

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

...where "Work" is a folder on my C: drive.

If I try a relative path like this, though, I get a DirectoryNotFoundException:

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

"Could not find a part of the path 'C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\DevServer\\10.0\\AppData\\PageData.xml'."

This is obviously wrong, but there must be an easy way to set the correct relative path? What am I overlooking? Your help is appreciated.

There's a couple of ways you can do it. You can use Server.MapPath() to turn a virtual directory into a physical directory path:

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

Or you can use Request.PhysicalApplicationPath as well, like so:

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

In either case, the problem is that the current working directory of the worker process is usually not set to the application directory (this is because working directory is a process-wide property, and a single process can host multiple web sites). More information is here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM