我正在读取一个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");
答案 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
所在的路径。