为什么 Path.Combine 会有这样的行为?

Gol*_*cks 2 c#

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

为什么 Path.Combine 会产生相对路径的结果?

在哪里:

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

var combinedPath = Path.Combine(basePath, relativePath);
Run Code Online (Sandbox Code Playgroud)

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

阅读本文和其他帖子以及 MSDN文档后:

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

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

我不明白的是为什么

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

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

可能会写我自己的方法来做我想做的事,只是想得到每个人的意见,为什么它可以故意这样设计。

Lua*_*aan 5

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

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

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