107 votes

Schéma d'Uri de fichier et fichiers relatifs

Supposons que le schéma d'un uri soit "file". Supposons également que le chemin d'accès commence par '.'.

Un exemple de chemin est './.bashrc'. A quoi ressemblerait le fulluri ? 'file://./.bashrc' me semble étrange.

102voto

Iceberg Points 919

En bref, l'URL d'un fichier prend la forme de :

file://localhost/absolute/path/to/file [ok]

ou vous pouvez omettre l'hôte (mais pas le slash) :

file:///absolute/path/to/file [ok]

mais pas ça :

file://file_at_current_dir [no way]

ni ça :

file://./file_at_current_dir [no way]

Je viens de le confirmer via urllib2.urlopen() de Python.

Plus de détails à partir de http://en.wikipedia.org/wiki/File_URI_scheme :

"file:///foo.txt" is okay, while "file://foo.txt" is not,
although some interpreters manage to handle the latter

27voto

kinORnirvana Points 821

Il est impossible d'utiliser le fichier complet : URI avec les segments '.' ou '..' dans le chemin sans la partie Root de ce chemin. Que vous utilisiez 'file://./.bashrc' ou 'file:///./.bashrc', ces chemins n'auront aucun sens. Si vous voulez utiliser un lien relatif, utilisez-le sans la partie protocole/autorité :

<a href="./.bashrc">link</a>

Si vous voulez utiliser l'URI complet, vous devez indiquer à un Root relatif quel est votre chemin relatif :

<a href="file:///home/kindrik/./.bashrc">link</a>

Selon RFC 3986

The path segments "." and "..", also known as dot-segments, are
defined for relative reference within the path name hierarchy.  They
are intended for use at the beginning of a relative-path reference
(Section 4.2) to indicate relative position within the hierarchical
tree of names.  This is similar to their role within some operating
systems' file directory structures to indicate the current directory
and parent directory, respectively.  However, unlike in a file
system, these dot-segments are only interpreted within the URI path
hierarchy and are removed as part of the resolution process (Section
5.2).

The complete path segments "." and ".." are intended only for use
within relative references (Section 4.1) and are removed as part of
the reference resolution process (Section 5.2).  However, some
deployed implementations incorrectly assume that reference resolution
is not necessary when the reference is already a URI and thus fail to
remove dot-segments when they occur in non-relative paths.  URI
normalizers should remove dot-segments by applying the
remove_dot_segments algorithm to the path, as described in Section 5.2.4.

The complete path segments "." and ".." are intended only for use
within relative references (Section 4.1) and are removed as part of
the reference resolution process (Section 5.2) 

La RFC 3986 décrit même un algorithme permettant de supprimer ces "." et ".." de l'URI.

24voto

andz Points 179

Dans un terminal, vous pouvez taper "file://$PWD/.bashrc" en utilisant "$PWD" pour faire référence au répertoire actuel.

21voto

Maxim Reznik Points 151

Vous ne devez pas mettre de double barre oblique après file: . La forme correcte est

'file:.bashrc'

Voir RFC 3986 , path-rootless définition

6voto

Ken Lin Points 86

Je ne connais pas votre cas d'utilisation.

J'ai un besoin similaire dans mon code node, donc quand j'ai besoin d'une url de fichier relative à mon répertoire de travail, je crée une url comme ceci ...

const url = "file://" + process.cwd() + "/" + ".bashrc";

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X