如何在WPF应用程序中从相对路径加载?

时间:2009-04-30 09:30:18

标签: c# windows path

我正在读取一个xml文件,并希望根据应用程序的位置从相对目录创建它,类似于使用Server.MapPath的ASP.NET或使用tilda。

如何在WPF中获取相对路径?

WORKS: XDocument xmlDoc = XDocument.Load(@"c:\testdata\customers.xml");
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~\Data\customers.xml");
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~/Data/customers.xml");

3 个答案:

答案 0 :(得分:17)

XDocument xmlDoc = XDocument.Load(
    Path.Combine(
        AppDomain.CurrentDomain.BaseDirectory, 
        @"Data\customers.xml"));

我假设Data目录将与您的应用一起部署,与EXE位于同一根目录中。这通常是安全的,除非涉及影子复制;例如,当您使用NUnit测试此代码时。 (使用卷影复制,组成应用程序的程序集将被复制到临时目录,但是这样的文件会被遗忘。)

假设您不打算在部署后修改customers.xml,最安全的方法是将文件作为资源嵌入到程序集中。

答案 1 :(得分:8)

XDocument xmlDoc = XDocument.Load(@"Data\customers.xml");

OR

XDocument xmlDoc = XDocument.Load(@".\Data\customers.xml");
BTW,这与WPF无关,与Windows路径无关。

答案 2 :(得分:1)

尝试File.Create("./HiImHere.txt")查看点目录的位置;之后尝试相对于HiImHere.txt所在的路径。