我的App_Data文件夹中有一个名为PageData.xml的XML文件。我想使用XDocument.Load填充此文件的XDocument。
如果我提供完整的物理路径,那就是:
XDocument vXDoc = XDocument.Load("/Work/Project/Web/100413 Dev/App_Data/PageData.xml");
...其中“工作”是我的C:驱动器上的文件夹。
但是,如果我尝试这样的相对路径,我会收到DirectoryNotFoundException:
XDocument vXDoc = XDocument.Load("AppData/PageData.xml");
“无法找到路径'C:\ Program Files(x86)\ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ AppData \ PageData.xml'的一部分。”
这显然是错误的,但必须有一种简单的方法来设置正确的相对路径?我在俯瞰什么?感谢您的帮助。
答案 0 :(得分:22)
有几种方法可以做到。您可以使用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);
在任何一种情况下,问题都是工作进程的当前工作目录通常不设置为应用程序目录(这是因为工作目录是一个进程范围的属性,而且是一个进程可以托管多个网站)。 More information is here