我们遇到了这篇文章所展示的同样的行为:
在哪里:
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文档后:
如果后续路径之一是绝对路径,则组合操作将从该绝对路径开始重置,并丢弃所有先前的组合路径。
我完全理解这种行为,以及它在做什么以及如何解决它。
我不明白的是为什么!
在什么情况下这是必需的行为?为什么您想要在这里传递一组参数,并让它完全忽略您传入的前几个参数,而只采用最后几个参数?
当然,微软最好将其视为例外,而不是仅仅忽略参数 - 如果尝试将绝对路径与已经绝对肯定是无效参数的路径合并......
可能会写我自己的方法来做我想做的事,只是想得到每个人的意见,为什么它可以故意这样设计。
简单的。您实际上relativePath不是相对路径。
正确的路径不能以\- 开头,因为它是根路径。如果您使用My\Relative\Folder,它将按照您的预期工作。
事实上,您会在很多地方看到这种行为,包括 Windows 命令处理器。如果我在C:\Windows,会dir \打印什么?
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |