Как загрузить из относительного пути в приложении WPF? - PullRequest
8 голосов
/ 30 апреля 2009

Я читаю 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 голосов
/ 30 апреля 2009
XDocument xmlDoc = XDocument.Load(
    Path.Combine(
        AppDomain.CurrentDomain.BaseDirectory, 
        @"Data\customers.xml"));

Я предполагаю, что каталог Data будет развернут с вашим приложением, в том же корневом каталоге, что и ваш EXE. Обычно это безопасно, кроме случаев, когда используется теневое копирование; например, когда вы используете NUnit для тестирования этого кода. (При теневом копировании сборки, составляющие ваше приложение, копируются во временный каталог, но такие файлы остаются позади.)

Если вы не планируете изменять customers.xml после развертывания, самый безопасный способ справиться с этим - встроить файл в качестве ресурса в вашу сборку.

8 голосов
/ 30 апреля 2009
XDocument xmlDoc = XDocument.Load(@"Data\customers.xml");

OR

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

Кстати, это не имеет никакого отношения к WPF и всему, что связано с путями Windows.

1 голос
/ 20 октября 2012

Попробуйте File.Create("./HiImHere.txt"), чтобы увидеть, где находится каталог точек; после этого попробуйте путь относительно того, где HiImHere.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...