質問

xmlファイルを読み込んでおり、ASP.NET with 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");
役に立ちましたか?

解決

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

または

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

ところで、これはWPFとは関係がなく、Windowsパスとは関係ありません。

他のヒント

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

Data ディレクトリは、アプリと一緒に、EXEと同じルートディレクトリにデプロイされると想定しています。これは、シャドウコピーが関係する場合を除き、一般に安全です。たとえば、NUnitを使用してこのコードをテストする場合。 (シャドウコピーでは、アプリを構成するアセンブリは一時ディレクトリにコピーされますが、このようなファイルは残されます。)

展開後に customers.xml を変更する予定がない場合、これを処理する最も安全な方法は、ファイルをアセンブリ内のリソースとして埋め込むことです。

File.Create(" ./ HiImHere.txt")を試して、ポイントディレクトリの場所を確認します。その後、 HiImHere.txt のある場所からの相対パスを試してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top