Como carregar de caminho relativo no aplicativo WPF?
Pergunta
Estou lendo um arquivo xml e quero fazê-lo a partir de um diretório relativo com base na localização da aplicação, semelhante ao ASP.NET com Server.MapPath ou usando o tilda.
Como você pode obter o caminho relativo no 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");
Solução
XDocument xmlDoc = XDocument.Load(@"Data\customers.xml");
ou
XDocument xmlDoc = XDocument.Load(@".\Data\customers.xml");
BTW, isso não tem nada a ver com WPF e tudo a ver com os caminhos do Windows.
Outras dicas
XDocument xmlDoc = XDocument.Load(
Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
@"Data\customers.xml"));
Eu assumo o diretório Data
vai ficar implantado com a sua aplicação, no mesmo diretório raiz como o seu EXE. Este é geralmente seguro, excepto se a cópia de sombra está envolvido; por exemplo, quando você usa NUnit para testar esse código. (Com cópia de sombra, as assembléias que compõem o seu aplicativo são copiados para um diretório temporário, mas os arquivos como este ficar para trás.)
Assumindo que você não está planejando para modificar customers.xml
após a implantação, a forma mais segura de lidar com isso é para incorporar o arquivo como um recurso dentro de sua montagem.
Tente File.Create("./HiImHere.txt")
para ver onde é o diretório do ponto; depois que tentar o caminho relativo para onde HiImHere.txt
é.