Je me demandais 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 formidable si quelqu'un pouvait expliquer quand utiliser \
et /
.
Je me demandais 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 formidable si quelqu'un pouvait expliquer quand utiliser \
et /
.
Réponses:
/
est le séparateur de chemin sur les systèmes Unix et de type Unix. Windows moderne peut généralement utiliser les deux \
et de /
manière interchangeable pour les chemins de fichiers, mais Microsoft préconise l'utilisation de \
comme séparateur de chemin depuis des décennies.
Ceci est fait pour des raisons historiques qui remontent aux années 1970, précédant Windows de plus d'une décennie. Au début, MS-DOS (la base des premiers Windows) ne prenait pas en charge les répertoires. Unix a pris en charge les répertoires en utilisant le /
caractère depuis le début. Cependant, lorsque des répertoires ont été ajoutés dans MS-DOS 2.0, Microsoft et IBM utilisaient déjà le /
caractère pour les commutateurs de commande , et en raison de l'analyseur léger de DOS (descendant de QDOS , conçu pour s'exécuter sur du matériel inférieur), ils ne pouvaient pas trouver un moyen pratique d'utiliser le /
personnage sans rompre la compatibilité avec leurs applications existantes.
Donc, pour éviter les erreurs de "manque un commutateur" ou "commutateur invalide" lors du passage des 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 pouvez 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 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. Lorsque Microsoft et IBM se sont séparés en 1990 , Microsoft a pris le code dont ils disposaient et a créé Windows NT , sur lequel toutes les versions modernes de Windows sont basées, emportant avec lui cet agnosticisme du séparateur.
Comme la rétrocompatibilité a été le nom du jeu pour Microsoft de toutes les transitions majeures du système d'exploitation qu'ils ont entreprises (DOS vers Win16 / DOS, vers Win16 / Win32, vers Win32 / WinNT), cette particularité est restée, et elle le sera probablement existent depuis un certain temps encore.
C'est pour cette raison que cet écart existe. Cela ne devrait vraiment avoir aucun effet sur ce que vous faites car, comme je l'ai dit, WinAPI peut généralement les utiliser de manière interchangeable. Cependant, les applications tierces seront probablement interrompues si vous réussissez /
quand elles attendent un\
entre les noms de répertoire. Si vous utilisez Windows, respectez \
. Si vous utilisez Unix ou des URI (qui ont leur fondement dans les chemins Unix, mais c'est une toute autre histoire), alors utilisez /
.
Dans le contexte de C #: Il convient de noter, puisqu'il s'agit techniquement d'une question C #, que 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), vous peut souhaiter utiliser le Path.DirectorySeparatorChar
champ pour que votre code utilise le séparateur préféré sur ce système et l'utiliser Path.Combine()
pour ajouter correctement les chemins.
Path.Combine
.
foo.exe /bar
pourrait être interprété comme un commutateur de ligne de commande, alors qu'il foo.exe \bar
pourrait être interprété comme faisant référence à un fichier / dossier appelé bar
qui se trouve dans le répertoire racine \
du "lecteur" actuel, comme C:\
par exemple.
/
à \
est effectuée dans la couche de compatibilité Win32, ce qui signifie que si vous la contournez, il y aura une différence. L'exemple le plus connu est celui des chemins de longueur étendue: \\?\C:\
fonctionnera comme prévu sur NTFS mais \\?\C:/
ne le fera pas.
/
et ` is not entirely true. For network path you have to use
`(par exemple. \\ <servername> bot not // <servername>)
MS-DOS 1.0 a conservé la convention de caractères d'option de ligne de commande (ou commutateur) de «/» de CP / M. À cette époque, 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 ont dû représenter le séparateur de chemin en utilisant quelque chose qui n'était pas en conflit avec les options de ligne de commande existantes. En interne, le système fonctionne aussi bien avec «/» que «\». Le processeur de commandes (et de nombreuses applications) a continué à utiliser le «/» comme caractère de commutation.
Une CONFIG.SYS
entrée SWITCHAR=-
peut être utilisée pour remplacer la /
valeur par défaut afin d'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 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 certains prennent en charge les deux conventions.
Le processeur de commandes PowerShell de suivi implémente des paramètres d'échappement et de commutation rigoureux et évite en grande partie la confusion, sauf lorsque des outils hérités sont utilisés.
Ni la question ni la réponse ne concernent C #.
/
comme introducteur d'options dans divers systèmes d'exploitation PDP-11 tels que RSTS (1970) et RSX (1972) précède celle de CP / M (1973).
Sur les systèmes Unix, il \
y a un caractère d'échappement, c'est-à-dire qu'il \
indique à l'analyseur 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épertoire, mais /
ne peut pas être utilisé dans les noms de fichier ou de répertoire.
\
et /
(ainsi que plusieurs autres symboles) ne peuvent pas être utilisés dans les noms de fichiers car DOS n'avait pas le même analyseur complexe auquel les utilisateurs Unix sont si habitués. L'absence d'un bon analyseur était le résultat de MS-DOS descendant de QDOS («Quick and Dirty Operating System»). Il était destiné à faire fonctionner les choses rapidement et sur du matériel limité. Tout cela existe bien sûr encore de nos jours pour des raisons de compatibilité ascendante.
/
été ajouté en tant que "Alternate_Directory_Separator"
\
est correct dans un chemin de fichier Windows et /
est correct dans un URI.Cela peut être une ressource pertinente.
\
à /
automatiquement. Dans mon livre, cela s'appelle «fonctionne de manière transparente».
Outre les réponses données, il convient de mentionner qu'il \
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 peu pratique d'avoir même besoin d'échapper une barre oblique inverse avec un autre ( \\
) pour l'utiliser correctement - ou d'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 par défaut 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 avoir cherché un peu, il semble que toute l'histoire entre /
et \
retourne dans «l'histoire de l'ordinateur», à l'époque du DOS et des systèmes Unix à cette époque. HowToGeek a un article intéressant sur cette histoire.
En bref, DOS 1.0 a été initialement publié par IBM sans prise en charge d'annuaire, et a /
été utilisé pour une autre fonctionnalité de commande ("commutation"). Lorsque les répertoires ont été introduits dans la version 2.0, /
étaient déjà utilisés, alors IBM a choisi le symbole le plus proche visuellement, qui était \
. D'autre part, Unix est généralement utilisé /
pour les répertoires.
Lorsque les utilisateurs ont commencé à utiliser de nombreux systèmes différents, ils ont commencé à devenir confus, obligeant les développeurs de systèmes d'exploitation à tenter de faire fonctionner les systèmes dans les deux cas - cela s'applique même dans la partie des URL, car certains navigateurs prennent en charge le http: \\ www.test. format com \ go . Cela avait cependant des inconvénients en général, mais le tout reste aujourd'hui encore pour des causes de compartimentation arrière, avec une tentative de support des deux barres obliques sous Windows, même si elles ne sont plus basées sur DOS.
` as well as many
shells make` ... vous avez raison de dire que Windows récent a défini la variable d'environnement ALTERNATE_PATH_SEPARATOR qui par défaut est /
donc Windows peut probablement accepter les deux.
/
chemins partout dans le système - bien sûr, les applications pouvaient mal comprendre ces chemins à leur guise, donc ce n'était pas trop utilisé. Les applications non-CLI qui n'ont pas essayé de faire leur propre validation (cassée) des chemins ont bien fonctionné dès le départ.
Vous ne devriez pas utiliser non plus en C #. Vous devez toujours utiliser la Path
classe . 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:
string fullPath = System.IO.Path.Combine("C:", "Folder1", "Folder2", "file.txt");
\
est utilisé pour les chemins de fichiers locaux Windows et les chemins de réseau comme dans:
C:\Windows\Temp\
ou \\NetworkSharedDisk\Documents\Archive\
/
est ce qui est requis par les URI standard comme dans:
/
dans les chemins (au moins 7 le font).
/
URI standard comme je l'ai indiqué dans la réponse.