我的 App_Data 文件夹中有一个名为 PageData.xml 的 XML 文件。我想使用 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’的一部分。”
这显然是错误的,但是必须有一种简单的方法来设置正确的相对路径吗?我忽略了什么?感谢您的帮助。
最佳答案
有几种方法可以做到这一点。您可以使用 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 .
关于c# - 如何在 XDocument.Load 中使用相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784495/