Мне было интересно о разнице между \ и /в пути к файлам. Я заметил, что иногда путь содержит, /а иногда и с \.
Было бы здорово, если бы кто-нибудь мог объяснить, когда использовать \и/ .
Мне было интересно о разнице между \ и /в пути к файлам. Я заметил, что иногда путь содержит, /а иногда и с \.
Было бы здорово, если бы кто-нибудь мог объяснить, когда использовать \и/ .
Ответы:
/является разделителем пути в 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, как я указал в ответе.