44

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

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

屈服c:\alpha\gamma而不是c:\alpha\..\gammaPath.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"));

他们输出相同的结果,似乎你不能将它移动到不同的共享第二个的正确答案应该是

\\machinea\shareb\folderb

但它给了

\\machinea\sharea\shareb\folderb

对彼此而言

于 2015-06-01T11:51:50.990 回答