我正在寻找类似于Path.Combine
方法的东西,可以帮助我正确组合绝对路径和相对路径。例如,我想要
Path.Combine(@"c:\alpha\beta", @"..\gamma");
屈服c:\alpha\gamma
而不是c:\alpha\..\gamma
像Path.Combine
那样屈服。有什么简单的方法可以做到这一点吗?不用说,我还想对.
路径或多条..
路径(例如..\..\
)进行循环以正常工作。
我正在寻找类似于Path.Combine
方法的东西,可以帮助我正确组合绝对路径和相对路径。例如,我想要
Path.Combine(@"c:\alpha\beta", @"..\gamma");
屈服c:\alpha\gamma
而不是c:\alpha\..\gamma
像Path.Combine
那样屈服。有什么简单的方法可以做到这一点吗?不用说,我还想对.
路径或多条..
路径(例如..\..\
)进行循环以正常工作。
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
对彼此而言