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");
Foi útil?

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 é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top