絶対パスと相対パスを正しく組み合わせるのに役立つPath.Combine
メソッドに似たものを探しています。たとえば、私はしたい
Path.Combine(@"c:\alpha\beta", @"..\gamma");
c:\alpha\gamma
のようにc:\alpha\..\gamma
の代わりにPath.Combine
を生成します。これを達成する簡単な方法はありますか?言うまでもなく、正しく機能するように、.
パスまたは複数の..
パス(例:..\..\
)にもピリオドを付けたいと思います。
使用する - Path.GetFullPath
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
Console.WriteLine(Path.GetFullPath(path));
または DirectoryInfo
クラス:
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
DirectoryInfo info = new DirectoryInfo(path);
Console.WriteLine(info.FullName);
両方とも出力します:
c:\alpha\gamma
おそらく、Path.Combineの後にPath.GetFullPathを実行できます。
次のように2つの呼び出しを組み合わせて使用できます。
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
string result = Path.GetFullPath(path);
そしてそれはあなたが探している結果をあなたに与えるはずです。
Path.GetFullPath を呼び出してこれを解決できます。
たとえば、次のコードは次のとおりです。
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
Console.WriteLine(path);
path = Path.GetFullPath(path);
Console.WriteLine(path);
印刷します:
c:\alpha\beta\..\gamma
c:\alpha\gamma
しかし、GetFullPathが常に正しいとは限らないようです。試してみてください。
Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\shareb\folderb"));
Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\..\shareb\folderb"));
それらは同じ結果を出力しますが、別の共有に移動するために移動することはできないようです
\\ machinea\shareb\folderb
しかしそれは与える
\\ machinea\sharea\shareb\folderb
両方のための