Alors, quelle est la bonne direction de la barre oblique du chemin (/ ou \) sous Windows?

StackOverflow https://stackoverflow.com/questions/1589930

  •  22-09-2019
  •  | 
  •  

Question

Il semble de Windows insiste sur l'écriture d'un \ backslash dans les chemins de fichiers, alors que la classe URI de .NET les écrit avec un / slash. Y at-il droit chemin, qui est acceptée même dans les systèmes les plus primitifs? Et pourquoi est-URI de .NET montrant l'autre barre oblique par rapport au reste de Windows?

Était-ce utile?

La solution

Un chemin de fichier et un URI sont différents. \ est correct dans un chemin de fichier Windows et / est correct dans un URI.

Donc, ce chemin du fichier: C:\Documents\Foo se traduit par cette URI: file:///C:/Documents/Foo

Autres conseils

Windows est l'enfant bâtard de systèmes d'exploitation à cet égard, mais beaucoup d'API acceptera slashs aussi bien. Sous Windows, un chemin de fichier ressemble à ceci:

C:\Users\jsmith\Documents\file.txt

Sur un système Unix (y compris Mac OS X et Linux), le même chemin ressemblerait à ceci:

/home/jsmith/Documents/file.txt

Une URL, standardisée RFC 1738 , toujours utilise des barres obliques vers l'avant, quelle que soit la plate-forme:

http://home.example.com/Documents/file.txt

La raison est historique. Même Windows peut inverser notre façon de penser sur les URL. Lorsque vous parlez antislashs, la seule plate-forme, vous trouverez qui les utilise est Windows (et quelques autres nouveauté).

Si vous pouvez voir antislashs utilisés autres que Windows serait chemins UNC - cependant, Windows est le principal promoteur de ces ainsi:

\\HOMESVR\Documents\file.txt

Et quoi que vous fassiez, ne faites pas une publicité pour votre site Web et dire "mon entreprise dot promotion slash com back".

La raison est un petit morceau de l'histoire. Lorsque UNIX a été créé, ou devrais-je dire plutôt UNICS, ils ont choisi le / comme séparateur pour les répertoires. Retour dans les jours, les médias de stockage était assez petite, et tous les répertoires dans la racine est un autre dispositif de stockage monté (/ bin / lib, etc.)

Lorsque la libération Microsoft MS-DOS version 1.0, il n'a pas le soutien de répertoire. Ils ont utilisé le caractère / des paramètres des programmes (programme / a / b)

MS-DOS 1.0, un changement d'image rapide de Q-DOS, est un système d'exploitation dérivé de CP / M, à partir de laquelle il a hérité des lettres de lecteur (A: C:. Etc)

Comme dans les versions plus tard, ils voulaient ajouter un peu de soutien du répertoire, ils ont choisi d'utiliser le \ depuis le / avait déjà un autre sens dans leur système d'exploitation.

Il y a beaucoup d'objets d'histoire de l'informatique dans les systèmes d'exploitation modernes, que je suppose que la plupart des gens ne se rendent pas compte, mais qui ont encore une influence majeure sur la façon dont ils travaillent.

Alors, quelle est la bonne façon? S'il y en a, je dirais que c'est le / parce que les systèmes d'exploitation de type UNIX étaient là bien avant le soutien d'annuaire Microsoft mis en œuvre dans leur DOS.

Comme une note de côté et parler de .NET, vous devez utiliser System.IO.Path.DirectorySeparatorChar pour obtenir le séparateur de chemin courant.

En ce qui concerne les séparateurs de chemin de système de fichiers vont, je crois que sur Windows tous API acceptera des barres obliques (mais peut-être il y en buggy qui ne sont pas) - le problème est que la plupart des applications ne pas les accepter (ou les analyser de manière incorrecte).

En fait, si je me souviens bien, même MS-DOS accepté « / » comme séparateur de chemin au niveau de l'API depuis qu'il a commencé à soutenir les sous-répertoires (v2.0) - mais à ce moment le caractère « / » avait déjà été établi comme le caractère « switch » pour les options de ligne de commande, de sorte que la barre oblique inverse est devenu le séparateur de chemin DOS sur defacto (et plus tard Windows).

URIs sont similaires mais différents animaux de chemins de fichiers et URIs doivent toujours utiliser « / » pour séparer les composants. les applications Windows et API acceptent probablement « \ » comme séparateur URIs probablement parce que les gens sont familiers avec l'utilisation de la barre oblique inverse comme séparateur sur ces systèmes et URIs peuvent également être utilisé pour représenter des fichiers locaux.


Inutile trivia du jour - dans certaines premières versions de MS-DOS il y avait une API pour changer la ligne de commande caractère commutateur d'option (généralement de « / » à « - ») de sorte que les commandes pourraient regarder de plus Unix et les commandes acceptent « / » comme un séparateur de chemin sur la ligne de commande. L'API a été moins réussie (je suppose parce qu'il n'a pas été soutenu universellement par les applications), et il a été supprimé dans les versions ultérieures.

Hmm ... en deuxième lecture, toute cette réponse est à peu près inutile trivia.

Windows utilise la barre oblique inverse (\) pour le séparateur de système de fichiers. Pour tout le reste de la barre oblique est utilisée (/). Le type de Uri utilise la barre oblique parce que comment un identifiant uniforme de ressource est définie.

La nappe est basée sur la façon dont UNIX de délimiter les répertoires dans un chemin d'accès par une barre oblique (/). Windows sépare les répertoires avec barre oblique inverse (\)

La bonne façon dépend de son utilisation. Pour un chemin vers un fichier local sur une machine Windows, utilisez la barre oblique inverse. Pour un chemin vers une ressource Web ou d'un fichier situé sur une machine UNIX (y compris Mac, Linux), utilisez une barre oblique.

La raison URI de .NET utilise des barres obliques vers l'avant est parce qu'il est mise en forme pour être utilisé dans un navigateur Web.

Le serveur fera tout le travail nécessaire pour lier les ressources web aux fichiers sur un disque dur.

de Windows accepte à la fois pour le chemin.

Essayez d'ouvrir l'Explorateur Windows et le type C:/Temp/Foo, c:\Temp\Foo seront ouverts correctement.

\ Backslash est dangereux, car vous devez être prudent avec échapper tout le temps. De nombreux langages de programmation ont un équivalent printf qui utilise antislash pour échapper.

/ Frontslash est la plupart du temps inoffensifs.

:. Côlon était (et dans une certaine mesure est encore) utilisé par Apple

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top