5

次のディレクトリ構造がある場合:

Project1/bin/debug
Project2/xml/file.xml

Project1/bin/debug ディレクトリから file.xml を参照しようとしています

私は基本的に次のことをしようとしています:

string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml":

これの正しい構文は何ですか?

4

4 に答える 4

10

文字列ではなく、パス コンポーネントをパス コンポーネントとして操作する方がよいでしょう。

string path = System.IO.Path.Combine(Environment.CurrentDirectory, 
                                     @"..\..\..\Project2\xml\File.xml");
于 2008-12-06T12:56:23.477 に答える
4

使用する:

System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml")
于 2008-12-06T12:56:21.637 に答える
2
string path = Path.Combine( Environment.CurrentDirectory,
                            @"..\..\..\Project2\xml\File.xml" );

1 つの「..」でビンに移動します

次の ".." で Project1 に移動します

次の ".." は、Project1 の親に移動します。

次に、ファイルにダウン

于 2008-12-06T12:56:57.517 に答える
1

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);
}
于 2008-12-06T13:17:45.603 に答える