質問
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
のある場所からの相対パスを試してください。
所属していません StackOverflow