为什么Path.Combine的行为方式如此?

时间:2014-10-22 12:11:11

标签: c#

我们遇到了这篇文章所展示的同样的行为:

Why does Path.Combine produce this result with a relative path?

其中:

var basePath = @"\\server\BaseFolder";
var relativePath = @"\My\Relative\Folder";

var combinedPath = Path.Combine(basePath, relativePath);

产生的输出为\My\Relative\Folder,而不是预期的\\server\BaseFolder\My\Relative\Folder

阅读本帖和其他帖子以及MSDN doc

  

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

我完全理解这种行为,以及它正在做什么以及如何解决它。

我不明白的是为什么

在什么情况下这是必需的行为?你为什么要在这里传递一组参数,让它完全忽略你传入的几个,而只是采取最后几个?

当然,微软会更好地将其视为例外,而不仅仅是忽略参数 - 如果尝试将绝对路径与已经绝对肯定是无效参数的路径合并...

可能会编写我自己的方法来做我想做的事情,只是想让每个人都知道为什么它可以像这样有目的地设计。

1 个答案:

答案 0 :(得分:4)

简单。您的relativePath 实际上不是相对路径

正确的路径不能以\开头 - 它是根源。如果您使用My\Relative\Folder,它将按预期工作。

事实上,您会在很多地方看到这种行为,包括Windows命令处理器。如果我在C:\Windowsdir \会打印出什么?