Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting file path in ASP.NET and XDocument.Load

Tags:

c#

.net

xml

I have a static class in a folder off root in my solution. In that static class' folder, there's a subfolder containing XML files. So I've got these files:

/PartialViews/Header/MyStaticClass.cs
/PartialViews/Header/Config/en-US.xml
/PartialViews/Header/Config/jp-JP.xml
...

I'm having trouble using XDocument.Load() with those XML files. Specifically, I'm trying to load the XML files from the static constructor of MyStaticClass.

XDocument.Load() can't seem to find the files, however. I've tried all these and none work:

static MyStaticClass()
{
    XDocument doc;

    // These all throw exceptions relating to directory not found
    doc = XDocument.Load("/Config/en-US.xml");
    doc = XDocument.Load(@"\Config\en-US.xml");
    doc = XDocument.Load("/PartialViews/Header/Config/en-US.xml");
    doc = XDocument.Load(@"\PartialViews\Header\Config\en-US.xml");
}

I also tried using Assembly.GetExecutingAssembly().Location and Assembly.GetEntryAssembly().Location before the relative path, but the assembly resolved by Assembly is always a .NET library (because the type is being initialized?).

How can I load the file without changing its location in the solution?

like image 533
Foobarbis Avatar asked Sep 14 '10 18:09

Foobarbis


2 Answers

In ASP.NET you should use Server.MapPath() to find all local files.

string relPath = "~/PartialViews/Header/Config/en-US.xml";
string absPath = Server.MapPath(relPath);

XDocument doc = XDocument.Load(absPath);
like image 116
Henk Holterman Avatar answered Nov 03 '22 10:11

Henk Holterman


For .NET web apps use HttpContext.Current.Server.MapPath("~/"); this will get you the root directory of the executing file.

like image 20
jon3laze Avatar answered Nov 03 '22 11:11

jon3laze