Path.Combine和点表示法

时间:2010-01-27 18:20:19

标签: c# .net path directory combinations

我正在寻找类似于Path.Combine方法的东西,它将帮助我正确地组合绝对路径和相对路径。例如,我想要

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

c:\alpha\gammac:\alpha\..\gamma而不是Path.Combine。有没有简单的方法来实现这一目标?毋庸置疑,我还希望将.路径或多个..路径(例如..\..\)设置为正常工作。

5 个答案:

答案 0 :(得分:62)

使用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

答案 1 :(得分:8)

你可以做一个Path.Combine,然后是Path.GetFullPath。

答案 2 :(得分:6)

您可以使用2个调用的组合:

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

这应该会给你你正在寻找的结果。

答案 3 :(得分: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

答案 4 :(得分:0)

但似乎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

两者