Мені було цікаво про різницю між шляхами до файлів \
та /
в них. Я помітив, що іноді шлях містить, /
а іноді - це \
.
Було б чудово, якщо хтось може пояснити, коли користуватися \
та /
.
Мені було цікаво про різницю між шляхами до файлів \
та /
в них. Я помітив, що іноді шлях містить, /
а іноді - це \
.
Було б чудово, якщо хтось може пояснити, коли користуватися \
та /
.
Відповіді:
/
є роздільником шляху для 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. Коли в 1990 році Microsoft і IBM розійшлися , Microsoft взяла код, який вони мали, і створила Windows NT , на якому базуються всі сучасні версії Windows, несучи з собою цей сепараторний агностицизм.
Оскільки зворотна сумісність назвала гру для Майкрософт від усіх основних переходів ОС, які вони здійснили (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:\
наприклад,.
/
до \
робиться в шарі компаута 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 \
- це символ втечі, тобто \
говорить аналізатору, що це пробіл, а не кінець оператора. У системах 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 в standarad, як я вже заявив у відповіді.