Итак, каково правильное направление косой черты пути (/ или \) в Windows?

StackOverflow https://stackoverflow.com/questions/1589930

  •  22-09-2019
  •  | 
  •  

Вопрос

Похоже, 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top