Path.Combine和点符号

我正在寻找类似于Path.Combine方法,它可以帮助我正确地组合绝对path和相对path。 例如,我想要

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

Path.Combine c:\alpha\gamma而不是c:\alpha\..\gamma 。 有没有简单的方法来完成这个? 不用说,我也想要一段时间. path或多个path(例如..\..\ )正常工作。

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

对彼此而言