プロジェクト フォルダーの外に XML ファイルがあり、コードからアクセスして、プロジェクトのディレクトリへの相対パスを配置する任意のマシンでコードを実行したいと考えています。
例として、現在のディレクトリがフォルダー A にあり、アクセスしたいファイルが A の隣のフォルダー B にあるとします。
プロジェクト フォルダーの外に XML ファイルがあり、コードからアクセスして、プロジェクトのディレクトリへの相対パスを配置する任意のマシンでコードを実行したいと考えています。
例として、現在のディレクトリがフォルダー A にあり、アクセスしたいファイルが A の隣のフォルダー B にあるとします。
XMLファイルが常にアプリケーションフォルダ内にある場合は、使用できます。
作業パスは、必ずしも実行可能ファイルが配置されている場所であるとは限りません。確実に、MSDNから取得した次のコードを使用できます。
string path;
path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
それ以外の場合は、.eg MyDocumentsなどのMicrosoftの特別なフォルダの一部である場合は、使用できます。
Environment.SpecialFolder.MyDocuments
このように使用します。
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
"myfile.xml")
出力は、現在のユーザーのマイドキュメントフォルダにあるmyfile.xmlへのパスになります。私の場合、それは私に与えるでしょうC:\Users\eandersson\Documents\myfile.xml
。
Path.Combineは、複数のディスクパスを1つに結合できるため、ここで非常に役立ちます。
編集:コメントによって要求された追加情報。
最善のアプローチは、 Directory.GetParentを使用することだと思います。
Directory.GetParent(Environment.CurrentDirectory).FullName
そして、このようなことをします。
Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "PathB", "myfile.xml")
これにより、プロジェクトフォルダと同じ場所でPathBが検索されます。
C:\MyProjects\PathA\MyExecutable.exe
C:\MyProjects\PathB\myfile.xml
MyExecutable.exe
その場所から実行しているとしましょう。上記のコードは、ファイルを含むPathB内の2番目の場所を自動的に返す必要がありますmyfile.xml
。