var actual = Path.Combine("c:", "filename");
var expected = @"c:\filename";
Assert.AreEqual(expected, actual);
Result
{Assert.AreEqual failed. Expected:<c:\filename>. Actual:<c:filename>.
Why?
var actual = Path.Combine("c:", "filename");
var expected = @"c:\filename";
Assert.AreEqual(expected, actual);
Result
{Assert.AreEqual failed. Expected:<c:\filename>. Actual:<c:filename>.
Why?
On
MSDN doesn't seem to explain why, but does provide documentation on what you're seeing:
Path.Combine(string path1, string path2)
If path1 is not a drive reference (that is, "C:" or "D:") and does not end with a valid separator character as defined in DirectorySeparatorChar, AltDirectorySeparatorChar, or VolumeSeparatorChar, DirectorySeparatorChar is appended to path1 before concatenation.
C:filenameis a valid path and is different fromC:\filename.C:filenameis the filefilenamein the current directory on theC:drive whereasC:\filenameis the filefilenamein the root of that drive. Apparently they wanted to keep the functionality of refering to the current directory on some drive.This behaviour is described here in MSDN