44

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

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

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

4

5 に答える 5

74

使用する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
于 2010-01-27T18:23:25.470 に答える
8

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

于 2010-01-27T18:22:26.167 に答える
6

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

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

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

于 2010-01-27T18:23:43.730 に答える
3

これを解決するには、 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
于 2010-01-27T18:23:45.150 に答える
0

しかし、GetFullPath が常に正しいとは限らないようです。

  Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\shareb\folderb"));
  Console.WriteLine(System.IO.Path.GetFullPath(@"\\machine\sharea\foldera\..\..\shareb\folderb"));

彼らは同じ結果を出力します。別の共有に移動することはできないようです.2番目のものの正解は

\\machinea\shareb\folderb

しかし、それは与えます

\\machinea\sharea\shareb\folderb

両方のための

于 2015-06-01T11:51:50.990 に答える