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

Кажется, Windows настаивает на записи обратного слэша \ в пути к файлам, тогда как класс .NET URI записывает их с помощью косой черты /. Есть ли правильный путь, который принимается даже в самых примитивных системах? И почему .NET URI показывает другую косую черту по сравнению с остальной Windows?

Ответ 1

Путь к файлу и URI различны. \ правильный в пути к файлу Windows и / правильный в URI.

Итак, этот путь к файлу: C:\Documents\Foo переводит этот URI: file:///C:/Documents/Foo

Ответ 2

В этом отношении 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 back slash promotion".

Ответ 3

Причиной этого является небольшая часть истории. Когда UNIX был создан, или я должен сказать, что UNICS, они выбрали разделитель/для каталогов. В те дни носители носителей были довольно небольшими, и каждый каталог в корневой папке был другим установленным устройством хранения (/bin/lib и т.д.)

Когда Microsoft выпускает MS-DOS версии 1.0, у нее не было поддержки каталогов. Они использовали символ/для параметров из программ (program/a/b)

MS-DOS 1.0, быстрый ребрендинг Q-DOS, является производной операционной системой на основе CP/M, из которой он унаследовал буквы дисков (A: C: и т.д.).

Как и в более поздних версиях, они хотели добавить поддержку некоторых каталогов, они решили использовать \, поскольку/уже имели другое значение в своей операционной системе.

В современных операционных системах много артефактов компьютерной истории, которые, как я полагаю, большинство людей не понимают, но все же оказывают большое влияние на то, как они работают.

Итак, каков правильный путь? Если есть, я бы сказал, что это /, потому что UNIX-подобные операционные системы были там до того, как Microsoft внедрила поддержку каталогов в их DOS.

Ответ 4

В качестве дополнительной заметки и обсуждения .NET вы должны использовать System.IO.Path.DirectorySeparatorChar для получения текущего разделителя путей.

Ответ 5

Что касается разделителей пути файловой системы, я считаю, что в Windows все API-интерфейсы будут принимать косые черты (но, возможно, некоторые из них ошибочные) - проблема в том, что большинство приложений не принимают их (или проанализируйте их неправильно).

Фактически, если я правильно помню, даже MS-DOS принимал '/' как разделитель путей на уровне API с тех пор, как начал поддерживать подкаталоги (v2.0), но к тому времени символ '/' уже был установлен как символ "switch" для параметров командной строки, поэтому обратная косая черта стала разделителем пути defacto в DOS (и позже Windows).

URI - это сходное, но другое животное из путей к файлам, и URI всегда должны использовать '/' для разделения компонентов. Приложения Windows и API, вероятно, принимают "\" как разделитель в URI, вероятно, потому, что люди знакомы с использованием обратной косой черты как разделителя в этих системах, а URI также могут использоваться для представления локальных файлов.


Бесполезные мелочи дня - в некоторых ранних версиях MS-DOS существовал API для изменения символа переключения командной строки (обычно от '/' до '-'), поэтому команды могли выглядеть более Unix-подобными и команды будут принимать '/' в качестве разделителя путей в командной строке. API был менее успешным (я думаю, потому что он не был повсеместно поддержан приложениями), и он был удален в более поздних версиях.

Хм... во втором чтении, весь этот ответ - это почти бесполезные мелочи.

Ответ 6

Windows использует обратную косую черту (\) для разделителя файловой системы. Для всего остального используется косая черта (/). Тип Uri использует прямую косую черту, так как определяется единый идентификатор ресурса.

Ответ 7

Веб основан на UNIX-способе разграничения каталогов в пути с косой чертой (/). Windows разделяет каталоги с обратными косыми чертами (\)

Правильный способ зависит от его использования. Для пути к локальному файлу на машине Windows используйте обратную косую черту. Для пути к веб-ресурсу или файлу, расположенному на компьютере под управлением UNIX (включая Mac, Linux), используйте косую черту.

Причина, по которой .NET URI использует косую черту, заключается в том, что она форматируется для использования в веб-браузере.

Сервер выполнит всю необходимую работу по связыванию веб-ресурсов с файлами на жестком диске.

Ответ 8

Windows принимает оба пути.

Попробуйте открыть проводник Windows и введите C: /Temp/Foo, c:\Temp\Foo будет правильно открыт.

Ответ 9

\ Backslash опасен, так как вам нужно быть осторожным с побегом все время. Многие языки программирования имеют эквивалент printf, который использует обратную косую черту для экранирования.

/Фронтслаш в основном безвреден.

: двоеточие было (и в какой-то степени еще) используется Apple.