Мне было интересно о разнице между \
и /
в пути к файлам. Я заметил, что иногда путь содержит, /
а иногда и с \
.
Было бы здорово, если бы кто-нибудь мог объяснить, когда использовать \
и/
.
Мне было интересно о разнице между \
и /
в пути к файлам. Я заметил, что иногда путь содержит, /
а иногда и с \
.
Было бы здорово, если бы кто-нибудь мог объяснить, когда использовать \
и/
.
Ответы:
/
является разделителем пути в Unix и Unix-подобных системах. Современные Windows обычно могут использовать оба \
и /
взаимозаменяемо для путей к файлам, но Microsoft выступает за использование в \
качестве разделителя пути в течение десятилетий.
Это сделано по историческим причинам, которые датируются 1970-ми годами, предшествующими Windows более чем на десятилетие. В начале MS-DOS (основа ранней Windows) не поддерживала каталоги. Unix имел поддержку каталогов, используя /
символ с самого начала. Однако, когда каталоги были добавлены в MS-DOS 2.0, Microsoft и IBM уже использовали /
символ для переключателей команд , и из-за легкого синтаксического анализатора DOS (произошедшего от QDOS , предназначенного для работы на более низком оборудовании), они не смогли найти Возможный способ использования /
персонажа без нарушения совместимости с существующими приложениями.
Таким образом, чтобы избежать ошибок «пропуска переключателя» или «неверного переключателя» при передаче путей к файлам в качестве аргументов командам, таким как эти:
cd/ <---- no switch specified
dir folder1/folder2 <---- /folder2 is not a switch for dir
было решено, что \
символ будет использоваться вместо, так что вы можете написать эти команды, как это
cd\
dir folder1\folder2
без ошибок.
Позже Microsoft и IBM сотрудничали в операционной системе, не связанной с DOS, под названием OS / 2 . В OS / 2 была возможность использовать оба разделителя, вероятно, чтобы привлечь больше разработчиков Unix. Когда Microsoft и IBM расстались в 1990 году , Microsoft взяла тот код, который у них был, и создала Windows NT , на которой основаны все современные версии Windows, неся этот разделительный агностицизм.
Поскольку обратная совместимость была названием игры для Microsoft от всех основных переходов ОС, которые они предприняли (DOS к Win16 / DOS, к Win16 / Win32, к Win32 / WinNT), эта особенность застряла, и она, вероятно, будет существует какое-то время
Именно по этой причине существует это несоответствие. Это действительно не должно влиять на то, что вы делаете, потому что, как я уже сказал, WinAPI обычно может использовать их взаимозаменяемо. Однако сторонние приложения, вероятно, сломаются, если вы передадите, /
когда они ожидают \
между именами каталогов. Если вы используете Windows, придерживайтесь \
. Если вы используете Unix или URI (которые основаны на путях Unix, но это совсем другая история), используйте /
.
В контексте C #: Следует отметить, так как это является технически C # вопрос, что если вы хотите написать более «портативный» код C # , который работает как на Unix и Windows (даже если C # является главным языком Windows), вам Возможно, вы захотите использовать это Path.DirectorySeparatorChar
поле, чтобы ваш код использовал предпочтительный разделитель в этой системе и использовал его Path.Combine()
для правильного добавления путей.
Path.Combine
.
foo.exe /bar
может быть интерпретировано как параметр командной строки, а foo.exe \bar
может быть интерпретировано как обращение к файлу / папке с именем, bar
который находится в корневом каталоге \
текущего «диска», как, C:\
например,.
/
to \
выполняется на уровне совместимости Win32, а это означает, что если вы обойдете ее, будет разница. Наиболее известным примером этого являются пути с увеличенной длиной: \\?\C:\
в NTFS будет работать как положено, но \\?\C:/
не будет.
/
и ` is not entirely true. For network path you have to use
`(например, \\ <имя_сервера> бот не // <имя_сервера>)
MS-DOS 1.0 сохранила символьную опцию командной строки (или переключатель) из CP / M. В то время в файловой системе не было структуры каталогов и не было конфликтов.
Когда Microsoft разработала среду, более похожую на Unix, с MS-DOS (и PC-DOS) 2.0, они должны были представить разделитель пути, используя то, что не конфликтует с существующими параметрами командной строки. Внутренне, система одинаково хорошо работает с '/' или '\'. Командный процессор (и многие приложения) продолжал использовать «/» в качестве символа переключения.
CONFIG.SYS
Запись SWITCHAR=-
может быть использована для переопределения по /
умолчанию для улучшения совместимости Unix. Это заставляет встроенные команды и стандартные утилиты использовать альтернативный символ. Разделитель пути Unix может быть однозначно использован для имен файлов и каталогов. Эта запись была удалена в более поздних версиях, но был задокументирован вызов DOS для установки значения после загрузки.
Это использовалось мало, и большинство сторонних инструментов остались без изменений. Путаница сохраняется. Многие порты инструментов Unix сохраняют символ «-», в то время как некоторые поддерживают оба соглашения.
Последующий командный процессор PowerShell реализует строгое экранирование и переключение параметров и в значительной степени избегает путаницы, за исключением случаев, когда используются устаревшие инструменты.
Ни вопрос, ни ответ не относятся к C #.
/
в качестве дополнительного устройства ввода в различных операционных системах PDP-11, таких как RSTS (1970) и RSX (1972), предшествует этому в CP / M (1973).
В системах на основе Unix \
это escape-символ, то есть \
сообщает анализатору, что это пробел, а не конец оператора. В системах Unix /
это разделитель каталогов.
В Windows \
это разделитель каталогов, но его /
нельзя использовать в именах файлов или каталогов.
\
и /
(а также несколько других символов) нельзя использовать в именах файлов, потому что в DOS не было такого же сложного парсера, к которому привыкли пользователи Unix. Отсутствие хорошего парсера было результатом того, что MS-DOS произошла от QDOS («Быстрая и грязная операционная система»). Он был предназначен для того, чтобы все работало быстро и на ограниченном оборудовании. Все это, конечно, все еще существует в настоящее время для обратной совместимости.
/
был добавлен как «Alternate_Directory_Separator»
\
правильно в пути к файлу Windows и /
правильно в URI.Это может быть актуальным ресурсом.
\
в /
автоматическом режиме. В моей книге это называется «работает без проблем».
Помимо приведенных ответов, стоит упомянуть, что они \
широко используются для специальных символов (таких как \n
\t
) в языках программирования, текстовых редакторах и общих системах, в которых применяется лексический анализ.
Если вы, например, программируете, иногда неудобно даже требовать экранирования от обратной косой черты с другим ( \\
), чтобы использовать его должным образом - или использовать экранирующие строки, такие как C # @"\test"
.
Конечно, как упоминалось ранее, веб-URI используют прямую косую черту по стандарту но обе косые черты работают в последних и наиболее распространенных инструментах командной строки,
ОБНОВЛЕНИЕ: После небольшого поиска, кажется, выясняется вся история между историями компьютеров и временами DOS и Unix-систем того времени /
и \
восходит к ним. HowToGeek имеет интересную статью об этой истории.
Вкратце, DOS 1.0 был первоначально выпущен IBM без поддержки каталогов и /
использовался для другой («переключающейся») функциональности команды. Когда каталоги были представлены в версии 2.0, /
уже использовались, поэтому IBM выбрала визуально ближайший символ, который был \
. С другой стороны, Unix стандартно используется /
для каталогов.
Когда пользователи начали использовать много разных систем, они начали путаться, заставляя разработчиков ОС пытаться заставить системы работать в обоих случаях - это даже относится к части URL, поскольку некоторые браузеры поддерживают http: \\ www.test. формат com \ go . Это в целом имело недостатки, но сегодня все еще стоит за причинами обратной совместимости с попыткой поддержки обоих слешей в Windows, даже если они больше не основаны на DOS.
` as well as many
make`-оболочки ... вы правы в том, что недавно Windows определила переменную среды ALTERNATE_PATH_SEPARATOR, по умолчанию равную которой, /
следовательно, Windows, вероятно, может принять и то и другое.
/
путей повсюду в системе - конечно, приложения могли неправильно понимать эти пути в свободное время, поэтому они не использовались слишком часто. Приложения без CLI, которые не пытались выполнить собственную (неработающую) проверку путей, работали нормально с самого начала.
Вы не должны использовать ни в C #. Вы должны всегда использовать Path
класс . Он содержит вызываемый метод, Path.Combine
который можно использовать для создания путей без указания разделителя самостоятельно.
Пример использования:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
используется для локальных путей к файлам Windows и сетевых путей, как в:
C:\Windows\Temp\
или \\NetworkSharedDisk\Documents\Archive\
/
это то, что требуется стандартными URI, как в:
/
пути (по крайней мере, 7 делает).
/
стандартных URI, как я указал в ответе.