Разница между косой чертой (/) и обратной косой чертой ( ) в пути к файлу

мне было интересно узнать о разнице между и / в пути к файлу. Я заметил, что иногда Путь содержит /и иногда с .

было бы здорово, если бы кто-нибудь мог объяснить, когда использовать и /.

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, как в:

http://www.stackoverflow.com/