Почему Path.Combine не добавляет Path.DirectorySeparatorChar после обозначения диска? - PullRequest
19 голосов
/ 07 октября 2009
var actual = Path.Combine("c:", "filename");
var expected = @"c:\filename";
Assert.AreEqual(expected, actual);

Результат

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

Почему?

Ответы [ 2 ]

28 голосов
/ 07 октября 2009

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

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

5 голосов
/ 07 октября 2009

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

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

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

...