如何在XDocument.Load中使用相对路径?

Pau*_*ulC 15 c# linq asp.net

我的App_Data文件夹中有一个名为PageData.xml的XML文件.我想使用XDocument.Load使用此文件填充XDocument.

如果我提供完整的物理路径,它可以工作,即:

XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml");
Run Code Online (Sandbox Code Playgroud)

...其中"工作"是我的C:驱动器上的文件夹.

但是,如果我尝试这样的相对路径,我会收到DirectoryNotFoundException:

XDocument vXDoc = XDocument.Load("AppData/PageData.xml");
Run Code Online (Sandbox Code Playgroud)

"无法找到路径'C:\ Program Files(x86)\ Common Files\Microsoft Shared\DevServer\10.0\AppData\PageData.xml'的一部分."

这显然是错误的,但必须有一种简单的方法来设置正确的相对路径?我在俯瞰什么?非常感谢您的帮助.

Dea*_*ing 23

有几种方法可以做到.您可以使用Server.MapPath()将虚拟目录转换为物理目录路径:

XDocument xdoc = XDocument.Load(Server.MapPath("/App_Data/PageData.xml"));
Run Code Online (Sandbox Code Playgroud)

或者您也可以使用Request.PhysicalApplicationPath,如下所示:

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

在任何一种情况下,问题都是工作进程的当前工作目录通常没有设置到应用程序目录(这是因为工作目录是一个进程范围的属性,并且一个进程可以托管多个网站).更多信息在这里.

  • 非常感谢您的及时回复.你的第一个建议对我来说不是"原样",但如果我在路径中添加一个'〜'就可以完美地工作,即:XDocument xdoc = XDocument.Load(Server.MapPath("〜/ App_Data/PageData.xml") ")); 非常感谢您的帮助. (4认同)