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

8

我正在阅读一个XML文件,并希望基于应用程序的位置从相对目录中获取它,类似于ASP.NET中的Server.MapPath或使用波浪符号。

在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个回答

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

我假设Data目录将与您的应用程序一起部署,在与您的EXE相同的根目录中。这通常是安全的,除了涉及阴影复制的情况,例如当您使用NUnit测试此代码时。(使用阴影复制时,组成您的应用程序的程序集会被复制到临时目录,但是像这样的文件会被留下。)

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


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

或者

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

顺便提一句,这与WPF无关,与Windows路径有关。


嗯,这两个似乎都不起作用,我已经将customers.xml设置为“复制到输出目录=始终复制”,还有其他建议吗? - Edward Tanguay
我建议使用 Environment.CurrentDirectory,这是您所期望的,并确保 Customers.xml 文件位于输出位置。 - Kent Boogaart
字符串 directory = System.IO.Directory.GetCurrentDirectory(); - Edward Tanguay
这个回答似乎不起作用,为什么它被接受为答案呢? 如果当前目录改变了,这个答案会让我担心。 - Simon_Weaver

2
尝试使用 File.Create("./HiImHere.txt") 命令,可以查看当前目录的位置;然后尝试以相对于 HiImHere.txt 的路径来操作。

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