问题
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?
回答1:
C:filename
is a valid path and is different from C:\filename
. C:filename
is the file filename
in the current directory on the C:
drive whereas C:\filename
is the file filename
in 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
回答2:
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.
来源:https://stackoverflow.com/questions/1527942/why-path-combine-doesnt-add-the-path-directoryseparatorchar-after-the-drive-des