Path.Combine("d://projects", "//20090716//11")); 的计算结果

下面代码执行的结果一样么?

Console.WriteLine(Path.Combine("d://projects", "//20090716//11"));
Console.WriteLine(Path.Combine("d://projects", "/20090716/11")); Console.WriteLine(Path.Combine("d://projects", "20090716//11"));

答案是不一样的,执行的结果分别是:

/20090716/11
/20090716/11
d:/projects/20090716/11

为何会这样呢??

MSDN 中文上的解释如下,红色字体是导致这个问题的根本原因:

如果 path2 不包括根(例如,如果 path2 没有以分隔符或驱动器规格起始),则结果是两个路径的串联,具有介于其间的分隔符。如果 path2 包括根,则返回 path2。

MSDN 英文的解释如下:

If path2 does not include a root (for example, if path2 does not start with a separator character or a drive specification), the result is a concatenation of the two paths, with an intervening separator character. If path2 includes a root, path2 is returned.

显然,除了 除了驱动器开头的路径会认为是根, / 或者 / 开头的也被认为是根,所以才有上面的计算结果

比如: //myserver/myshare/foo/bar/baz.txt  这个路径中, 我们就可以看到 / 确实有必要作为根路径

在这里 / 或者 / 被等同处理,是因为各个操作系统上确实用的不一样。如下:

Path.DirectorySeparatorChar 字段 
提供平台特定的字符,该字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为斜杠(“/”),在 Windows 和 Macintosh 操作系统上为反斜杠(“/”)。

Path.AltDirectorySeparatorChar 字段
提供平台特定的替换字符,该替换字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为反斜杠(“/”),在 Windows 和 Macintosh 操作系统上为斜杠(“/”)。

Path.VolumeSeparatorChar 字段
提供平台特定的卷分隔符。
该字段的值在 Windows 和 Macintosh 上为冒号(“:”),在 Unix 操作系统上为斜杠(“/”)。

参考资料:

Path.Combine 方法
http://msdn.microsoft.com/zh-cn/library/fyy7a5kt.aspx

http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspx

 

Path.Combine (合并两个路径字符串)方法的一些使用细节
http://blog.joycode.com/ghj/archive/2006/08/07/79611.joy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值