Différence entre barre oblique (/) et barre oblique inverse (\) dans le chemin du fichier

Je m’interrogeais sur la différence entre \ et / dans les chemins de fichiers. J’ai remarqué que parfois un chemin contient / et parfois il est avec \ .

Ce serait génial si quelqu’un pouvait expliquer quand utiliser \ et / .

/ est le séparateur de chemin sur les systèmes Unix et Unix. Windows moderne peut généralement utiliser les deux \ et / indifféremment pour les chemins de fichiers, mais Microsoft a préconisé l’utilisation de \ comme séparateur de chemin pendant des décennies.

Ceci est fait pour des raisons historiques qui remontent aux années 1970, avant Windows par plus de dix ans. Au début, MS-DOS (la base du début de Windows) ne supportait pas les répertoires. Unix avait un support de répertoire utilisant le caractère / depuis le début. Toutefois, lorsque des répertoires ont été ajoutés sous MS-DOS 2.0, Microsoft et IBM utilisaient déjà le caractère / pour les commutateurs de commandes et, en raison de l’parsingur léger de DOS (dérivé de QDOS conçu pour s’exécuter sur du matériel inférieur), un moyen faisable d’utiliser le caractère / sans casser la compatibilité avec leurs applications existantes.

Donc, pour éviter les erreurs sur “manquer un commutateur” ou “commutateur invalide” lors du passage de chemins de fichiers comme arguments à des commandes telles que celles-ci:

 cd/ <---- no switch specified dir folder1/folder2 <---- /folder2 is not a switch for dir 

il a été décidé que le caractère \ serait utilisé à la place, vous pourriez donc écrire ces commandes comme ceci

 cd\ dir folder1\folder2 

sans erreur.

Plus tard, Microsoft et IBM ont collaboré sur un système d'exploitation sans lien avec DOS appelé OS / 2 . OS / 2 pouvait utiliser les deux séparateurs, probablement pour attirer plus de développeurs Unix. Lorsque Microsoft et IBM se sont séparés en 1990 , Microsoft a pris le code qu'ils avaient et créé Windows NT , sur lequel sont basées toutes les versions modernes de Windows, ce qui lui confère cette agnosticisme.


Comme la compatibilité ascendante a été le nom du jeu pour Microsoft de toutes les transitions majeures qu’ils ont entresockets (DOS vers Win16 / DOS, Win16 / Win32, Win32 / WinNT), cette particularité est restée la même existe encore un moment.

C'est pour cette raison que cette divergence existe. Cela ne devrait vraiment pas avoir d'effet sur ce que vous faites car, comme je l'ai dit, WinAPI peut généralement les utiliser indifféremment. Cependant, les applications tierces risquent de se briser si vous transmettez un / quand elles attendent un \ entre les noms de répertoire. Si vous utilisez Windows, restz avec \ . Si vous utilisez Unix ou des URI (qui ont leur base sur les chemins Unix, mais c'est une autre histoire), alors utilisez / .


Dans le contexte de C #: Il convient de noter que, puisque c’est techniquement une question C #, si vous voulez écrire plus de code C "portable" qui fonctionne à la fois sous Unix et Windows (même si C # est principalement un langage Windows) peut vouloir utiliser le champ Path.DirectorySeparatorChar pour que votre code utilise le séparateur préféré sur ce système et utiliser Path.Combine() pour append les chemins correctement.

MS-DOS 1.0 a conservé la convention de caractères de l’option de ligne de commande (ou du commutateur) de «/» à partir de CP / M. A cette époque, il n’y avait pas de structure de répertoire dans le système de fichiers et pas de conflit.

Lorsque Microsoft a développé un environnement similaire à Unix avec MS-DOS (et PC-DOS) 2.0, ils devaient représenter le séparateur de chemin en utilisant quelque chose qui n’entrait pas en conflit avec les options de ligne de commande existantes. En interne, le système fonctionne aussi bien avec ‘/’ ou ‘\’. Le processeur de commandes (et de nombreuses applications) continuait à utiliser le caractère “/” comme caractère de commutation.

Une entrée CONFIG.SYS SWITCHAR=- pourrait être utilisée pour remplacer / default pour améliorer la compatibilité Unix. Cela rend les commandes intégrées et les utilitaires standard utilisent le caractère alternatif. Le séparateur de chemin Unix pourrait alors être utilisé sans ambiguïté pour les noms de fichiers et de répertoires. Cette entrée a été supprimée dans les versions ultérieures, mais un appel DOS a été documenté pour définir la valeur après le démarrage.

Cela a été peu utilisé et la plupart des outils tiers sont restés inchangés. La confusion persiste. De nombreux ports des outils Unix conservent le caractère de commutateur ‘-‘, tandis que d’autres prennent en charge les deux conventions.

Le processeur de commandes PowerShell de suivi implémente des parameters d’échappement et de commutation rigoureux et évite en grande partie la confusion, sauf en cas d’utilisation d’outils hérités.

Ni la question ni la réponse ne concernent C #.

Sur les systèmes Unix, \ est un caractère d’échappement, c’est-à-dire que \ indique à l’parsingur qu’il s’agit d’un espace et non de la fin de l’instruction. Sur les systèmes Unix / est le séparateur de répertoire.

Sous Windows \ est le séparateur de répertoires, mais / ne peut pas être utilisé dans les noms de fichiers ou de répertoires.

  • Une URL, normalisée dans la RFC 1738, utilise toujours des barres obliques, quelle que soit la plate-forme.
  • Un chemin de fichier et un URI sont différents. \ est correct dans un chemin de fichier Windows et / est correct dans un URI.
  • Plusieurs navigateurs (à savoir Firefox et Opera) échouent de manière catastrophique lorsqu’ils rencontrent des URI avec des barres obliques inverses.
  • System.IO.Path.DirectorySeparatorChar pour obtenir le séparateur de chemin actuel

Cela peut être une ressource pertinente.

Outre les réponses données, il convient de mentionner que \ est largement utilisé pour les caractères spéciaux (tels que \n \t ) dans les langages de programmation, les éditeurs de texte et les systèmes généraux qui appliquent l’parsing lexicale.

Si vous programmez par exemple, il est parfois difficile de devoir échapper à une barre oblique inverse avec une autre ( \\ ) pour pouvoir l’utiliser correctement – ou utiliser des chaînes d’échappement, telles que C # @"\test" .

Bien sûr, comme mentionné précédemment, les URI Web utilisent une barre oblique standard mais les deux barres obliques fonctionnent dans les outils de ligne de commande les plus récents et les plus courants .

MISE À JOUR: Après un peu de recherche, il semble que toute l’histoire entre / et \ retourne dans “l’histoire de l’ordinateur”, à l’époque des systèmes DOS et Unix. HowToGeek a un article intéressant sur cette histoire.

En bref, DOS 1.0 a été initialement publié par IBM sans prise en charge de répertoire et / été utilisé pour une autre fonctionnalité de commande (“commutation”). Lorsque les répertoires ont été introduits dans la version 2.0, / était déjà utilisé, IBM a donc choisi le symbole visuel le plus proche, à savoir \ . D’autre part, Unix est utilisé de manière standard / pour les répertoires.

Lorsque les utilisateurs ont commencé à utiliser de nombreux systèmes différents, ils ont commencé à être confus, ce qui a obligé les développeurs à tenter de faire fonctionner les systèmes dans les deux cas . format com \ go . Cela a eu des inconvénients en général, mais le problème est toujours d’actualité, avec une tentative de prise en charge des deux barres obliques sous Windows, même si elles ne sont plus basées sur DOS.

Vous ne devriez pas utiliser l’un ou l’autre en C #. Vous devez toujours utiliser la classe Path . Cela contient une méthode appelée Path.Combine qui peut être utilisée pour créer des chemins sans spécifier le séparateur vous-même.

Exemple d’utilisation:

 ssortingng fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt"); 

\ est utilisé pour les chemins de fichiers locaux Windows et les chemins réseau, comme dans:

C:\Windows\Temp\ ou \\NetworkSharedDisk\Documents\Archive\

/ est ce qui est requirejs par les URI standard comme dans:

http://www.stackoverflow.com/