2

相対パスから絶対パスを取得する必要がありますが、アセンブリの実行元以外のフォルダーを使用して解決"."し、"..". Path.GetFullPathそのようなオーバーロードは提供しません。

たとえば、次のパスがあるとします。

..\MyOtherFolder\foo.bar

そして、アセンブリが実行されているフォルダーは次のとおりです。

c:\users\me\desktop\source\myproj\bin\debug\

しかし、実際には、どこにでも配置できます。

に解決されるc:\testように「現在の」フォルダーを指定したい。"..""c:\"

これが .NET フレームワークのどこかに組み込まれているかどうかは誰にもわかりませんか? そうでない場合は、Utility メソッドを作成する予定ですが、最初に確認しようと思いました (特に静的拡張メソッドがないため...)。

編集:

Path.Combine動作しないでしょう。このメソッドが本質的に行うことは、2 つの文字列を連結することだけです。

4

5 に答える 5

7

やってみました

Path.GetFullPath(Path.Combine(@"C:\test", @"..\MyOtherFolder\foo.bar"))

これでうまくいくはずです。

于 2012-12-10T21:32:26.763 に答える
5
public string FullPathRelativeTo(string root, string partialPath)
{
    string oldRoot = Directory.GetCurrentDirectory();
    try {
        Directory.SetCurrentDirectory(root);
        return Path.GetFullPath(partialPath);
    }
    finally {
        Directory.SetCurrentDirectory(oldRoot);
    }
}
于 2012-12-10T21:55:30.077 に答える
4

あなたが現在入っていて、あなたが入っていることを知らずc:\testに取得したい場合は、やりたいです。c:\MyOtherFolder\foo.barc:\test

 Environment.CurrentDirectory = @"..\MyOtherFolder"; //navigation accepts relative path
 string fullPath = Directory.GetCurrentDirectory(); // returns full path

その後、現在のディレクトリを以前の場所に戻すことができます。

于 2012-12-10T21:39:41.353 に答える
3

できるよ

new DirectoryInfo( @"..\MyOtherFolder\foo.bar" ).FullName
于 2014-01-25T00:47:11.310 に答える
2

Path.Combine(...)メソッドを使用してみてください。目的を達成するのに役立ちます..

于 2012-12-10T21:31:41.827 に答える