Différence entre slash forward ( / ) et backslash () dans le chemin du fichier

je me demandais quelle était la différence entre et / dans les chemins de fichier. J'ai remarqué que parfois un chemin contient / et parfois il est avec .

ce serait génial si n'importe qui peut expliquer quand utiliser et / .

131
demandé sur PC Luddite 2016-07-18 07:22:20

7 réponses

/ est le séparateur de chemins sur les systèmes Unix et Unix-like. Windows moderne peut généralement utiliser à la fois \ et / interchangeables pour les chemins de fichiers, mais Microsoft a préconisé l'utilisation de \ comme le séparateur de chemin pendant des décennies.

Ceci est fait pour des raisons historiques qui remontent aussi loin que les années 1970, prédisant fenêtres par Plus d'une décennie. Au début, MS-DOS (la fondation de Windows early) ne supportait pas les répertoires. Depuis le début, Unix gère les répertoires en utilisant le caractère / . Cependant, lorsque les répertoires ont été ajoutés dans MS-DOS 2.0, Microsoft et IBM utilisaient déjà le caractère / pour command switches , et à cause de L'analyseur léger de DOS (descendant de QDOS , conçu pour fonctionner sur le matériel bas de gamme), ils ne pouvaient pas trouver une façon faisable d'utiliser le caractère / sans rompre la compatibilité avec leur existant application.

ainsi, pour éviter les erreurs de "manquer un interrupteur" ou" interrupteur invalide "en passant les 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, de sorte que vous pouvez é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 rapport avec DOS appelé OS / 2 . OS / 2 avait la capacité d'utiliser les deux séparateurs, probablement pour attirer plus de développeurs Unix. Quand Microsoft et IBM se sont séparés en 1990 , Microsoft a pris quel code ils avaient et créé Windows NT , sur lequel toutes les versions modernes de Windows sont basées, portant cet agnosticisme séparateur avec elle.


comme la compatibilité arrière a été le nom du jeu pour Microsoft de toutes les grandes transitions OS qu'ils ont entreprises (DOS à Win16/DOS, à Win16/Win32, à Win32/Win32), cette particularité est restée, et elle existera probablement pour un certain temps encore.

C'est pour cette raison que cette différence existe. Il ne devrait vraiment pas avoir d'effet sur ce que vous faites parce que, comme je l'ai dit, le WinAPI peut généralement les utiliser de façon interchangeable. Cependant, les applications de tiers se casseront probablement si vous réussissez un / quand ils s'attendent à un \ entre les noms de répertoire. Si vous utilisez Windows, collez avec \ . Si vous utilisez Unix ou URI s (qui ont leur base dans les chemins Unix, mais c'est une autre histoire entièrement), puis utiliser / .


dans le contexte de C#: il convient de noter, puisque ce est techniquement un c# question, que si vous voulez écrire plus" portable " C# code cela fonctionne à la fois sur Unix et Windows (même si C# est principalement un langage Windows), vous pourriez vouloir utiliser le champ Path.DirectorySeparatorChar de sorte que votre code utilise le séparateur préféré sur ce système, et utiliser Path.Combine() pour ajouter des chemins correctement.

220
répondu PC Luddite 2016-07-31 18:37:00

MS-DOS 1.0 a conservé l'option de ligne de commande (ou la convention de commutation) de caractère" / " du CP/M. à ce moment-là, il n'y avait aucune structure de répertoire dans le système de fichiers et aucun conflit.

lorsque Microsoft a développé L'environnement plus 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 soit '/' ou '\'. Le processeur de commande (et de nombreuses applications) a continué à utiliser le caractère '/' comme commutateur.

a CONFIG.SYS "entry SWITCHAR=- pourrait être utilisé pour outrepasser le / défaut pour améliorer la compatibilité Unix. Cela fait que les commandes intégrées et les utilitaires standard utilisent le caractère alternatif. Le séparateur de chemin Unix peut 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.

cette méthode était peu utilisée et la plupart des outils de tiers sont demeurés inchangés. La confusion persiste. De nombreux ports D'outils Unix conservent le caractère " - " alors que certains supportent les deux conventions.

le processeur de commande PowerShell qui suit met en œuvre des paramètres rigoureux d'échappement et de commutation et évite en grande partie la confusion, sauf dans les cas où des outils traditionnels sont utilisés.

ni la question ni la réponse ne se rapportent à C#.

19
répondu Pekka 2017-11-03 19:39:17

Sur les systèmes de type Unix \ est un caractère d'échappement, qui est, \ indique à l'analyseur que c'est un espace et non pas la fin de l'instruction. Sur les systèmes Unix / est le séparateur de répertoires.

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

8
répondu CountryRabbit 2016-09-11 18:34:40
  • une URL, standardisée dans la RFC 1738, utilise toujours des slashes vers l'avant, indépendamment de la plateforme.
  • un chemin de fichier et une URI sont différents. \ est correct dans un fichier Windows le chemin et / est correct dans une URI.
  • plusieurs navigateurs (notamment Firefox & Opera) échouent de manière catastrophique lorsque rencontrer des URIs avec des backslashs.
  • Système
  • .IO.Chemin.Directyseparatorchar pour obtenir le séparateur de chemin courant

Ce peut être pertinent de ressources.

7
répondu Sami 2017-05-23 12:18:19

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'analyse lexicale.

si vous programmez par exemple, il est parfois incommode d'avoir même besoin d'échapper à backslash avec un autre ( \ ) afin de l'utiliser correctement - ou besoin D'utiliser des chaînes d'échappement, comme C# @"\test" .

bien sûr, comme mentionné ci-dessus, les URIs web utilisent la barre oblique vers l'avant par la norme , mais les deux barres obliques fonctionnent dans les outils en ligne de commande les plus récents et les plus courants .

mise à jour: après une petite recherche, il semble que toute l'histoire entre / et \ remonte à "l'histoire de l'ordinateur", à L'époque du DOS et des systèmes basés sur Unix. HowToGeek a une intéressant article à propos de cette histoire.

en bref, DOS 1.0 a été initialement publié par IBM sans support de répertoire, et / a été utilisé pour une autre fonctionnalité de commande ("commutation"). Lorsque les répertoires ont été introduits dans la version 2.0, / était déjà en usage, donc IBM a choisi le symbole visuellement le plus proche, qui était \ . D'un autre côté, Unix utilise en standard / pour les répertoires.

lorsque les utilisateurs ont commencé à utiliser de nombreux systèmes différents, ils ont commencé à devenir confus, ce qui rend les développeurs de système d'exploitation pour tenter de faire fonctionner les systèmes dans les deux cas - cela s'applique même dans la partie des URLs, car certains navigateurs prennent en charge le http:\\www.test.com\go format. Cela a eu des inconvénients bien que dans l'ensemble, mais l'ensemble reste aujourd'hui encore pour les causes rétrogrades de compartibilité, avec une tentative de soutien des deux barres obliques sur les fenêtres, même si elles ne sont pas fondées sur DOS plus.

7
répondu Nick Louloudakis 2017-08-15 17:21:48

vous ne devriez pas utiliser l'un ou l'autre dans C#. Vous devez toujours utiliser la Path classe . Ceci 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'usage:

string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
6
répondu TheLethalCoder 2016-09-11 18:46:33

\ est utilisé pour Windows local chemins d'accès aux fichiers et les chemins d'accès au réseau, comme dans:

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

/ est ce qui est requis par la norme de Uri comme dans:

http://www.stackoverflow.com /

5
répondu Ash 2017-01-16 18:06:53