Мне было интересно узнать разницу между \
и /
в путях файлов. Я заметил, что иногда путь содержит /
, а иногда и с \
.
Было бы здорово, если кто-нибудь сможет объяснить, когда использовать \
и /
.
Мне было интересно узнать разницу между \
и /
в путях файлов. Я заметил, что иногда путь содержит /
, а иногда и с \
.
Было бы здорово, если кто-нибудь сможет объяснить, когда использовать \
и /
.
/
- разделитель путей в 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, но эта другая история полностью), используйте /
.
В контексте С#: Следует отметить, так как это технически вопрос на С#, если вы хотите написать более "переносимый" код С#, который работает как на Unix, так и на Windows (даже если С# является преимущественно языком Windows), вы можете использовать поле Path.DirectorySeparatorChar
, чтобы ваш код использовал предпочтительный разделитель в этой системе и используйте Path.Combine()
для правильного добавления путей.
MS-DOS 1.0 сохранил опцию символа командной строки (или переключателя) команды//из CP/M. В то время в файловой системе не было структуры каталогов и конфликтов.
Когда Microsoft разработала более унифицированную среду Unix с MS-DOS (и PC-DOS) 2.0, им необходимо было представить разделитель путей, используя что-то, что не противоречило существующим параметрам командной строки. Внутри система работает одинаково хорошо с "/" или "\". Командный процессор (и многие приложения) продолжал использовать символ "/" в качестве символа переключения.
A CONFIG.SYS
entry SWITCHAR=-
может использоваться для переопределения параметра /
по умолчанию для улучшения совместимости с Unix. Это позволяет встроенные команды и стандартные утилиты использовать альтернативный символ. После этого разделитель путей Unix можно было бы однозначно использовать для имен файлов и каталогов. Эта запись была удалена в более поздних версиях, но DOS-вызов был документирован для установки значения после загрузки.
Это мало использовалось, и большинство сторонних инструментов остались неизменными. Путаница сохраняется. Многие порты инструментов Unix сохраняют символ "-", а некоторые поддерживают оба соглашения.
Следующий процессор команд PowerShell реализует строгие параметры экранирования и переключения и в значительной степени избегает путаницы, кроме тех случаев, когда используются устаревшие инструменты.
Ни вопрос, ни ответ не связаны с С#.
В системах на основе Unix \
- это escape-символ, то есть \
сообщает парсеру, что это пробел, а не конец оператора. В Unix-системах /
- это разделитель каталогов.
В Windows \
находится разделитель каталогов, но /
не может использоваться в именах файлов или каталогов.
\
правильный в файле Windows
путь и /
верны в URI.Этот может быть релевантным ресурсом.
Кроме ответов, стоит упомянуть, что \
широко используется для специальных символов (например, \n
\t
) в языках программирования, текстовых редакторах и общих системах, которые применяют лексический анализ.
Если вы, например, программируете, иногда неудобно, нужно даже избегать обратной косой черты с другой (\\
), чтобы использовать ее правильно - или нужно использовать экранирующие строки, такие как С# @"\test"
.
Конечно, как упоминалось ранее, веб-URI используют косую черту стандартным , но обе черты работают в последних и наиболее распространенных инструментах командной строки.
UPDATE: после небольшого поиска, кажется, что вся история между /
и \
восходит к "истории компьютеров", в эпоху DOS и систем на базе Unix того времени. HowToGeek имеет интересную статью об этой истории.
Вкратце, DOS 1.0 был первоначально выпущен IBM без поддержки каталогов, а /
использовался для другой ( "коммутирующей" ) функции. Когда каталоги были представлены в версии 2.0, /
уже использовался, поэтому IBM выбрала визуально ближайший символ, который был \
. С другой стороны, Unix стандартно использовал /
для каталогов.
Когда пользователи начали использовать множество разных систем, они начали запутываться, что заставило разработчиков ОС попытаться заставить системы работать в обоих случаях - это даже применяется в части URL-адресов, поскольку некоторые браузеры поддерживают http:\\www.test.com\go. У этого были недостатки, хотя в целом, но сегодня все еще стоит за соображениями обратной совместимости с попыткой поддержки обеих косых черт в Windows, хотя они больше не основаны на DOS.
Вы не должны использовать ни С#. Вы всегда должны использовать класс Path
. Он содержит метод Path.Combine
, который может использоваться для создания путей без указания разделителя самостоятельно.
Пример использования:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
используется для локальных путей и сетевых путей Windows, как в:
C:\Windows\Temp\
или \\NetworkSharedDisk\Documents\Archive\
/
- это то, что требуется стандартными URI, как в: