次のディレクトリ構造がある場合:
Project1/bin/debug
Project2/xml/file.xml
Project1/bin/debug ディレクトリから file.xml を参照しようとしています
私は基本的に次のことをしようとしています:
string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml":
これの正しい構文は何ですか?
文字列ではなく、パス コンポーネントをパス コンポーネントとして操作する方がよいでしょう。
string path = System.IO.Path.Combine(Environment.CurrentDirectory,
@"..\..\..\Project2\xml\File.xml");
使用する:
System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml")
string path = Path.Combine( Environment.CurrentDirectory,
@"..\..\..\Project2\xml\File.xml" );
1 つの「..」でビンに移動します
次の ".." で Project1 に移動します
次の ".." は、Project1 の親に移動します。
次に、ファイルにダウン
Path.Combine() を使用すると、期待した結果が得られない場合があることに注意してください。
string path = System.IO.Path.Combine(@"c:\dir1\dir2",
@"..\..\Project2\xml\File.xml");
これにより、次の文字列が生成されます。
@"c:\dir1\dir2\dir3\..\..\Project2\xml\File.xml"
パスが「c:\dir1\Project2\xml\File.xml」であると予想される場合は、Path.Combine() の代わりに次のようなメソッドを使用できます。
public static string CombinePaths(string rootPath, string relativePath)
{
DirectoryInfo dir = new DirectoryInfo(rootPath);
while (relativePath.StartsWith("..\\"))
{
dir = dir.Parent;
relativePath = relativePath.Substring(3);
}
return Path.Combine(dir.FullName, relativePath);
}