Итак, каково правильное направление косой черты пути (/ или \) в Windows?
Вопрос
Похоже, Windows настаивает на написании обратной косой черты \
в путях к файлам, тогда как класс URI .NET записывает их с косой чертой /
.Есть ли какой-нибудь правильный способ, который принят даже в самых примитивных системах?И почему URI .NET показывает другую косую черту по сравнению с остальной частью Windows?
Решение
Путь к файлу и URI отличаются друг от друга. \
правильно указан путь к файлу Windows и /
является правильным в URI.
Итак, этот путь к файлу: C:\Documents\Foo
переводится в этот URI: file:///C:/Documents/Foo
Другие советы
Windows в этом отношении является внебрачным ребенком операционных систем, но многие API также принимают косые черты.В Windows путь к файлу выглядит следующим образом:
C:\Users\jsmith\Documents\file.txt
В Unix-подобной системе (включая Mac OS X и Linux) тот же путь выглядел бы следующим образом:
/home/jsmith/Documents/file.txt
URL-адрес, стандартизированный в RFC 1738, всегда использует косые черты независимо от платформы:
http://home.example.com/Documents/file.txt
Причина этого историческая.Даже Windows не может изменить наше представление об URL-адресах.Когда вы говорите о обратных косых чертах, вы обнаружите, что единственная платформа, которая их использует, - это Windows (и некоторые другие новинки).
Там, где вы могли бы увидеть обратную косую черту, используемую не только Windows, были бы UNC-пути - однако Windows также является главным сторонником их:
\\HOMESVR\Documents\file.txt
И что бы вы ни делали, не делайте рекламу для своего веб-сайта и не говорите "продвижение моей компании в dot com с обратным уклоном".
Причиной этого является небольшой кусочек истории.Когда был создан UNIX, или мне лучше сказать UNICS, они выбрали разделитель / as для каталогов.В те времена носители данных были довольно маленькими, и каждый каталог в корневом каталоге представлял собой другое смонтированное запоминающее устройство (/bin / lib и т.д.).
Когда Microsoft выпустила MS-DOS версии 1.0, в ней не было поддержки каталогов.Они использовали символ / для параметров из программ (program /a /b)
MS-DOS 1.0, быстрый ребрендинг Q-DOS, является производной от CP / M операционной системой, от которой она унаследовала буквы дисков (A:C:и т.д.)
Поскольку в более поздних версиях они хотели добавить некоторую поддержку каталогов, они решили использовать \, поскольку / уже имело другое значение в их операционной системе.
В современных операционных системах есть много артефактов компьютерной истории, которые, я полагаю, большинство людей не осознают, но все еще оказывают большое влияние на то, как они работают.
Итак, каков же правильный путь?Если таковой существует, я бы сказал, что это /, потому что UNIX-подобные операционные системы существовали задолго до того, как Microsoft внедрила поддержку каталогов в свой DOS.
В качестве дополнительного примечания и обсуждения .NET, вы должны использовать System.IO.Path.DirectorySeparatorChar
чтобы получить разделитель текущего пути.
Что касается разделителей путей к файловой системе, я считаю, что в Windows ВСЕ API-интерфейсы будут принимать косые черты (но, возможно, есть некоторые глючные, которые этого не делают) - проблема в том, что большинство приложений их не принимают (или неправильно анализируют).
Фактически, если я правильно помню, даже MS-DOS приняла '/' в качестве разделителя путей на уровне API с тех пор, как начала поддерживать подкаталоги (версия 2.0), но к тому времени символ '/' уже был установлен в качестве символа 'switch' для параметров командной строки, поэтому обратная косая черта стала разделителем путей по умолчанию в DOS (и более поздних версиях Windows).
URI похожи, но отличаются от путей к файлам, и URI всегда должны использовать '/' для разделения компонентов.Приложения и API Windows, вероятно, принимают '\' в качестве разделителя в URI, вероятно, потому, что люди знакомы с использованием обратной косой черты в качестве разделителя в этих системах, и URI также могут использоваться для представления локальных файлов.
Бесполезные мелочи дня - в некоторых ранних версиях MS-DOS существовал API для изменения символа переключения параметров командной строки (обычно с '/' на '-'), чтобы команды могли выглядеть более Unix-подобными и команды принимали '/' в качестве разделителя путей в командной строке.API был менее чем успешным (я думаю, потому, что он не повсеместно поддерживался приложениями), и он был удален в более поздних версиях.
Хм...при втором чтении весь этот ответ представляет собой в значительной степени бесполезные мелочи.
Windows использует обратную косую черту (\
) для разделителя файловой системы.Для всего остального используется косая черта (/
).В Uri
тип использует косую черту, потому что именно так единый идентификатор ресурса определяется.
Веб основан на способе UNIX разделять каталоги в пути косой чертой (/).Windows разделяет каталоги обратной косой чертой (\)
Правильный способ зависит от его использования.Для указания пути к локальному файлу на компьютере с Windows используйте обратную косую черту.Для указания пути к веб-ресурсу или файлу, расположенному на компьютере под управлением UNIX (включая Mac, Linux), используйте косую черту.
Причина .URI NET использует косые черты, потому что это форматирование для использования в веб-браузере.
Сервер выполнит всю необходимую работу по привязке веб-ресурсов к файлам на жестком диске.
Windows принимает оба параметра для path.
Попробуйте открыть проводник Windows и введите C:/Temp/Foo
, c:\Temp\Foo
будет корректно открыт.
\ Обратная косая черта опасна, так как вам нужно быть осторожным с экранированием все время.Многие языки программирования имеют эквивалент printf, который использует обратную косую черту для экранирования.
/ Frontslash в основном безвреден.
:двоеточие использовалось (и в какой-то степени используется до сих пор) Apple.