Path.Combine
использует значения Path.DirectorySeperatorChar
и Path.VolumeSeparatorChar
, и они определяются библиотеками классов во время выполнения - поэтому, если вы пишете свой код, используя только вызовы Path.Combine
, значения Environment.SpecialFolder
и т. Д. В-четвертых, он будет работать везде, так как Mono (и, вероятно, любая среда выполнения .NET) реализует собственный способ получения и построения этих путей для любой платформы, на которой он работает. (Ваш второй пример, например, возвращает /server/mydir
для меня, но первый пример дает c:\/windows
)
Если вы хотите, чтобы во всех случаях был жестко задан специфичный для UNIX путь, Path.Combine
ничего вам не даст: Console.WriteLine ("/server/mydir");
делает то, что вы хотите в ОП.
Однако, как сказал Ганс, разные файловые системы имеют разные правила для разрешенных символов, длины пути и т. Д., Поэтому лучшая практика, как и при любом кроссплатформенном программировании, - это ограничивать себя использованием пересечения разрешенных функций между файловые системы, на которые вы ориентируетесь. Смотрите также вопросы чувствительности к регистру.