Подтвердить что ты не робот

Почему Path.Combine не добавляет Path.DirectorySeparatorChar после указателя диска?

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

Результат

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

Почему?

4b9b3361

Ответ 1

C:filename является допустимым путем и отличается от C:\filename. C:filename - это файл filename в текущем каталоге диска C:, тогда как C:\filename - это файл filename в корневом каталоге этого диска. По-видимому, они хотели сохранить функциональность ссылки на текущий каталог на каком-то диске.

Это поведение описано здесь в MSDN

Ответ 2

MSDN, похоже, не объясняет, почему, но предоставляет документацию о том, что вы видите:

Path.Combine(строка path1, строка path2)

Если путь1 не является ссылкой на диск (то есть "C:" или "D:" ) и не заканчивается действительным символом разделителя, как это определено в DirectorySeparatorChar, AltDirectorySeparatorChar или VolumeSeparatorChar, то DirectorySeparatorChar добавляется к пути 1 перед конкатенацией.