惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Security Blog
Microsoft Security Blog
量子位
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - Franky
美团技术团队
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
罗磊的独立博客
Jina AI
Jina AI
小众软件
小众软件
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
博客园 - 聂微东
博客园_首页
The Cloudflare Blog
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
有赞技术团队
有赞技术团队

博客园 - Yoshow

网络共享疑难解决方法 C#中如何一句代码交换a,b的值,都是int类型 URL编码表 - Yoshow - 博客园 无法在Web服务器上启动调试 Silverlight 中读取JSON数据 Silverlight 全屏方法 WebBrowser的Cookie操作 URL与URI的区别 Silverlight 3 Tools 中文版地址 fckeditor 修改记录 SharePoint 2007 SDK v1.5 C#中使用位运算来实现权限管理 Silverlight 3 正式版 开发工具 TFS 使用命令强行解锁被锁定的文件或文件夹 使用Google Weather API查询天气预报 SharePoint磁盘容量规划 清理SQL Server 数据库日志 SharePoint 2007 SP2 SQL SERVER 2008 阻止保存要求重新创建表的更改
Path.Combine 使用方法 - Yoshow - 博客园
Yoshow · 2009-07-28 · via 博客园 - Yoshow

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