Действительно ли это возможно к любому использованию Система. Класс IO.Path или некоторый подобный объект для форматирования Unix разрабатывает путь, предоставляя схожую функциональность классу ПУТИ? Например, я могу сделать:
Console.WriteLine(Path.Combine("c:\\", "windows"));
Который показывает:
"C:\\windows"
Но я, пробуют подобную вещь наклонными чертами вправо (/), она просто инвертирует их для меня.
Console.WriteLine(Path.Combine("/server", "mydir"));
Который показывает:
"/server\\mydir"
В этом случае я бы использовал класс System.Uri или System.UriBuilder .
Дополнительное примечание: если вы запускаете свой .NET-код в Linux-системе с Mono-Runtime, класс Path должен вернуть ваше ожидаемое поведение. Информация, которую использует класс Path, предоставляется базовой системой.
У вас более серьезные проблемы, Unix допускает символы в имени файла, чего не допускает Windows. Этот код взорвется с ArgumentException, "Illegal characters in path":
string path = Path.Combine("/server", "accts|payable");
Вы не можете надежно использовать Path.Combine() для путей Unix.
Path.Combine
использует значения Path.DirectorySeperatorChar
и Path.VolumeSeparatorChar
, а они определяются библиотеками классов в среде выполнения - поэтому если вы напишите свой код, используя только Path. Combine
, Environment.SpecialFolder
и так далее, он будет работать нормально везде, так как Mono (и, вероятно, любая .NET среда исполнения) реализует собственный способ получения и построения этих путей для любой платформы, на которой он работает. (Ваш второй пример, например, возвращает /server/mydir
для меня, но первый пример дает c:\/windows
)
Если вам нужен UNIX-специфичный путь, жестко закодированный во всех случаях, Path.Combine
ничего не даст: Console.WriteLine ("/server/mydir");
делает то, что вы хотите в OP.
Как сказал Ханс, разные файловые системы имеют разные правила для разрешенных символов, длины пути и т.д., поэтому, как и при любом кросс-платформенном программировании, лучше всего ограничиться использованием пересечения разрешенных функций между файловыми системами, на которые вы ориентируетесь. Следите также за чувствительностью к регистру.