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

15
我有一个名为PageData.xml的XML文件,存储在我的App_Data文件夹中。我想使用XDocument.Load将此文件填充到XDocument中。
如果我提供完整的物理路径,它就能正常工作,即:
XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml");

...其中"Work"是我C盘上的一个文件夹。

但是,如果我尝试使用相对路径,例如这样,我会收到DirectoryNotFoundException(目录未找到)的错误提示:

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

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

这显然是错误的,但肯定有一种容易的方法来设置正确的相对路径吧?我有没有忽略什么?感谢您的帮助。

1个回答

23

你可以使用Server.MapPath()方法将虚拟目录转换为物理路径,有几种方法可以实现。

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

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

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

无论哪种情况,问题在于工作进程的当前工作目录通常不会设置为应用程序目录(这是因为工作目录是一个进程范围的属性,而单个进程可以托管多个网站)。这里有更多信息


4
非常感谢您的及时回复。您的第一个建议对我来说“原样”无法使用,但是如果我在路径中添加“~”,它就可以完美地工作,即:XDocument xdoc = XDocument.Load(Server.MapPath("~/App_Data/PageData.xml"));非常感谢您的帮助。 - PaulC
1
这似乎是一个IIS6的问题,而我正在使用IIS7。 - zeristor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接