这是Path.Combine上的错误吗?

时间:2014-01-29 08:11:51

标签: c# .net

我想确保路径始终以\结尾,并尝试使用Path.Combine作为下面的代码。

我希望System.IO.Path.Combine("xxx", System.IO.Path.DirectorySeparatorChar.ToString())返回xxx\,但只返回\

System.IO.Path.Combine("xxx", "\\", "zz")也是如此,我期待xxx\zz,但事实证明是\zz

以下是我所做的测试。 enter image description here

我不确定这是否是一个理想的行为,或者它是一个错误。

4 个答案:

答案 0 :(得分:4)

这是Path.Combine的定义行为。如果第二个(或任何后续)路径是“rooted”,即以“\”或“c:”之类的路径分隔符开头,则忽略任何先前的参数。来自文档:

  

如果path2不包含根(例如,如果path2未启动)   使用分隔符或驱动器规范),结果是a   这两条路径的连接,带有插入分隔符   字符。如果path2包含root,则返回path2。

使用System.IO.Path.DirectorySeparatorChar时,你不应该使用像Path.Combine这样的东西,恕我直言,它的全部意义在于让路径操作更容易,而不是更难。

答案 1 :(得分:1)

Path.Combine结合了路径。如果第二个参数是相对路径,则组合路径;如果它是绝对路径,则仅返回第二个参数(因为组合绝对路径没有意义)。 \是指向根目录的绝对路径。

可以更轻松地实现您的目标
myPath = myPath.TrimEnd('\') + "\";

另一方面,为什么您需要以\结束路径? Path.Combine的重点是,您 需要以\结尾的路径。请注意以下示例:

myPath = Path.Combine(@"C:\xxx", "zz");    // yields C:\xxx\zz
myPath = Path.Combine(@"C:\xxx\", "zz");   // also yields C:\xxx\zz

答案 2 :(得分:0)

来自Combine的文档:

  

如果后续路径之一是绝对路径,则组合操作将从该绝对路径开始重置,丢弃所有先前的组合路径。

由于\是绝对路径,因此前面的所有内容都将被丢弃。

答案 3 :(得分:0)

这是记录在案的行为。来自Path.Combine(string path1, string path2)的文档:

  

如果path2包含绝对路径,则此方法返回path2。