为什么Path.Combine不在驱动器指示符后添加Path.DirectorySeparatorChar?

时间:2009-10-06 20:28:48

标签: .net path path-combine

var actual = Path.Combine("c:", "filename");
var expected = @"c:\filename";
Assert.AreEqual(expected, actual);

结果

{Assert.AreEqual failed. Expected:<c:\filename>. Actual:<c:filename>.

为什么?

2 个答案:

答案 0 :(得分:28)

C:filename是有效路径,与C:\filename不同。 C:filenamefilename驱动器上当前目录中的文件C:,而C:\filename是该驱动器根目录中的文件filename。显然,他们希望保留在某个驱动器上引用当前目录的功能。

此行为在MSDN中描述为here

答案 1 :(得分:5)

MSDN似乎没有解释原因,但确实提供了您所看到的内容的文档:

  

Path.Combine(string path1,string path2)

     

如果path1不是驱动器引用(即“C:”或“D:”)并且不以DirectorySeparatorChar,AltDirectorySeparatorChar或VolumeSeparatorChar中定义的有效分隔符结尾,则在连接之前将DirectorySeparatorChar附加到path1