Path.Combine 使用方法
Path.Combine 使用方法
System.IO.Path.Combine 简单来说,就是合并两个路径字符串。
比如如下调用,Path.Combine(@"C:11","aa.txt") 返回的字符串路径如后: C:11aa.txt
这个方法的声明如下:
public static string Combine ( string path1, string path2 )
示例 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"));
答案是不一样的,执行的结果分别是:
2009071611
/20090716/11
d:projects2009071611
为何会这样呢??
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.
显然,除了 除了驱动器开头的路径会认为是根, / 或者 开头的也被认为是根,所以才有上面的计算结果
比如: \myservermysharefoobarbaz.txt 这个路径中, 我们就可以看到 / 确实有必要作为根路径
在这里 / 或者 被等同处理,是因为各个操作系统上确实用的不一样。如下:
Path.DirectorySeparatorChar 字段
提供平台特定的字符,该字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为斜杠(“/”),在 Windows 和 Macintosh 操作系统上为反斜杠(“”)。
Path.AltDirectorySeparatorChar 字段
提供平台特定的替换字符,该替换字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为反斜杠(“”),在 Windows 和 Macintosh 操作系统上为斜杠(“/”)。
Path.VolumeSeparatorChar 字段
提供平台特定的卷分隔符。
该字段的值在 Windows 和 Macintosh 上为冒号(“:”),在 Unix 操作系统上为斜杠(“/”)。
参考地址:
http://msdn.microsoft.com/zh-cn/library/fyy7a5kt.aspx
http://blog.joycode.com/ghj/archive/2009/07/27/115665.joy
http://blog.joycode.com/ghj/archive/2006/08/07/79611.joy
System.IO.Path.Combine 简单来说,就是合并两个路径字符串。
比如如下调用,Path.Combine(@"C:11","aa.txt") 返回的字符串路径如后: C:11aa.txt
这个方法的声明如下:
public static string Combine ( string path1, string path2 )
示例 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"));
答案是不一样的,执行的结果分别是:
2009071611
/20090716/11
d:projects2009071611
为何会这样呢??
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.
显然,除了 除了驱动器开头的路径会认为是根, / 或者 开头的也被认为是根,所以才有上面的计算结果
比如: \myservermysharefoobarbaz.txt 这个路径中, 我们就可以看到 / 确实有必要作为根路径
在这里 / 或者 被等同处理,是因为各个操作系统上确实用的不一样。如下:
Path.DirectorySeparatorChar 字段
提供平台特定的字符,该字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为斜杠(“/”),在 Windows 和 Macintosh 操作系统上为反斜杠(“”)。
Path.AltDirectorySeparatorChar 字段
提供平台特定的替换字符,该替换字符用于在反映分层文件系统组织的路径字符串中分隔目录级别。
该字段的值在 Unix 上为反斜杠(“”),在 Windows 和 Macintosh 操作系统上为斜杠(“/”)。
Path.VolumeSeparatorChar 字段
提供平台特定的卷分隔符。
该字段的值在 Windows 和 Macintosh 上为冒号(“:”),在 Unix 操作系统上为斜杠(“/”)。
参考地址:
http://msdn.microsoft.com/zh-cn/library/fyy7a5kt.aspx
http://blog.joycode.com/ghj/archive/2009/07/27/115665.joy
http://blog.joycode.com/ghj/archive/2006/08/07/79611.joy
-*- 此文章为本人发呆时 ctrl+c , ctrl+v 的结果. 如果损害到您的利益, 可以联系我 QQ: 248078462 -*-