Система. IO.Path или эквивалентное использование с путями Unix

Действительно ли это возможно к любому использованию Система. Класс IO.Path или некоторый подобный объект для форматирования Unix разрабатывает путь, предоставляя схожую функциональность классу ПУТИ? Например, я могу сделать:

Console.WriteLine(Path.Combine("c:\\", "windows"));

Который показывает:

"C:\\windows"

Но я, пробуют подобную вещь наклонными чертами вправо (/), она просто инвертирует их для меня.

Console.WriteLine(Path.Combine("/server", "mydir"));

Который показывает:

"/server\\mydir"
6
задан Sam Hosseini 16 October 2015 в 11:53
поделиться

3 ответа

В этом случае я бы использовал класс System.Uri или System.UriBuilder .

Дополнительное примечание: если вы запускаете свой .NET-код в Linux-системе с Mono-Runtime, класс Path должен вернуть ваше ожидаемое поведение. Информация, которую использует класс Path, предоставляется базовой системой.

3
ответ дан 10 December 2019 в 02:43
поделиться

У вас более серьезные проблемы, Unix допускает символы в имени файла, чего не допускает Windows. Этот код взорвется с ArgumentException, "Illegal characters in path":

  string path = Path.Combine("/server", "accts|payable");

Вы не можете надежно использовать Path.Combine() для путей Unix.

3
ответ дан 10 December 2019 в 02:43
поделиться

Path.Combine использует значения Path.DirectorySeperatorChar и Path.VolumeSeparatorChar, а они определяются библиотеками классов в среде выполнения - поэтому если вы напишите свой код, используя только Path. Combine, Environment.SpecialFolder и так далее, он будет работать нормально везде, так как Mono (и, вероятно, любая .NET среда исполнения) реализует собственный способ получения и построения этих путей для любой платформы, на которой он работает. (Ваш второй пример, например, возвращает /server/mydir для меня, но первый пример дает c:\/windows )

Если вам нужен UNIX-специфичный путь, жестко закодированный во всех случаях, Path.Combine ничего не даст: Console.WriteLine ("/server/mydir"); делает то, что вы хотите в OP.

Как сказал Ханс, разные файловые системы имеют разные правила для разрешенных символов, длины пути и т.д., поэтому, как и при любом кросс-платформенном программировании, лучше всего ограничиться использованием пересечения разрешенных функций между файловыми системами, на которые вы ориентируетесь. Следите также за чувствительностью к регистру.

3
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: