Path.Combine 和点符号

Posted

技术标签:

【中文标题】Path.Combine 和点符号【英文标题】:Path.Combine and the dot notation [duplicate] 【发布时间】:2011-01-10 02:18:19 【问题描述】:

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

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

产生c:\alpha\gamma 而不是c:\alpha\..\gamma 就像Path.Combine 那样。有什么简单的方法可以做到这一点吗?不用说,我还想使用. 路径或多个.. 路径(例如..\..\)才能正常工作。

【问题讨论】:

【参考方案1】:

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

【讨论】:

呵呵,甚至不知道GetFullPath 的存在。性感。【参考方案2】:

您可能可以先执行 Path.Combine,然后执行 Path.GetFullPath。

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

您可以致电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

【讨论】:

【参考方案5】:

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

两者都有

【讨论】:

以上是关于Path.Combine 和点符号的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中的 path.combine [重复]

使用System.IO.Combine(string path1, string path2, string path3)四个参数的重载函数提示`System.IO.Path.Combine(stri

Path.Combine(string path1, string path2 )的用法

Path.Combine(string path1, string path2 )的用法

C#C# IO类路径合并本地路径拼接路径Path.Combine

C#C# IO类路径合并本地路径拼接路径Path.Combine