我正在寻找类似于Path.Combine
方法的东西,它将帮助我正确地组合绝对路径和相对路径。例如,我想要
Path.Combine(@"c:\alpha\beta", @"..\gamma");
以c:\alpha\gamma
为c:\alpha\..\gamma
而不是Path.Combine
。有没有简单的方法来实现这一目标?毋庸置疑,我还希望将.
路径或多个..
路径(例如..\..\
)设置为正常工作。
答案 0 :(得分:62)
string path = Path.Combine(@"c:\alpha\beta", @"..\gamma");
Console.WriteLine(Path.GetFullPath(path));
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
两者