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