web-dev-qa-db-ja.com

Path.Combineとドット表記

絶対パスと相対パスを正しく組み合わせるのに役立つPath.Combineメソッドに似たものを探しています。たとえば、私はしたい

Path.Combine(@"c:\alpha\beta", @"..\gamma");

c:\alpha\gammaのようにc:\alpha\..\gammaの代わりにPath.Combineを生成します。これを達成する簡単な方法はありますか?言うまでもなく、正しく機能するように、.パスまたは複数の..パス(例:..\..\)にもピリオドを付けたいと思います。

40
Dmitri Nesteruk

使用する - 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
65
jason

おそらく、Path.Combineの後にPath.GetFullPathを実行できます。

8
Aryabhatta

次のように2つの呼び出しを組み合わせて使用​​できます。

string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
string result = Path.GetFullPath(path);

そしてそれはあなたが探している結果をあなたに与えるはずです。

6
Steve Danner

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
3
Reed Copsey

しかし、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

両方のための

0
user2192239