128 votes

Une variable de chemin d'accès à un répertoire doit-elle se terminer par une barre oblique ?

Lorsqu'un chemin d'accès à un répertoire est défini comme variable ou constante, doit-il se terminer par une barre oblique ? Quelle est la convention ?

pwd sous Unix affiche votre répertoire actuel sans barre oblique, tandis que la tabulation complète de cd /var/www/apps/ inclut la barre oblique, ce qui m'a laissé dans l'incertitude.

130voto

Dave Sherohman Points 25122

J'opte pour la barre oblique parce que :

  1. "S'il se termine par une barre oblique, il s'agit d'un répertoire. Sinon, c'est un fichier" est une convention facile à retenir.

  2. Au moins sur les systèmes d'exploitation que j'utilise couramment, doubler la barre oblique ne pose aucun problème, tandis que l'omettre en pose de gros. Il est donc plus sûr de mettre la barre oblique dans la variable et d'utiliser la commande "$path/$file" lors de son utilisation.

48voto

Karl Wilbur Points 3089

Je sais que ce texte date de dix ans, mais je voulais y ajouter mon opinion personnelle.

Non. Non. Absolument pas.

Il s'agit d'un système Unix. En ce qui concerne le répertoire lui-même, il s'agit d'un nœud comme les autres. Lorsqu'il fait référence au répertoire, son nom ne doit jamais comporter de barre oblique non encapsulée (réf : dirname , pwd , ~ , echo $HOME , echo $PATH , la sortie de ls et al).

Lorsqu'il est fait référence au contenu d'un répertoire, puis vous avez besoin d'une barre oblique. C'est-à-dire, ls /home/karl/ est plus approprié que ls /home/karl (FTR, je fais presque toujours ce dernier parce que ...eh bien, paresseux).

Lorsqu'on utilise une variable contenant un répertoire pour créer le chemin complet d'un fichier, on s'attend toujours à inclure la barre oblique (i.,e : cp ${HOME}/test ${OTHER_DIR}/ ).

Il est attendue qu'un répertoire ne se termine pas par une barre oblique. S'attendre à ce qu'un répertoire se termine par une barre oblique est une erreur. Ainsi, l'ajout d'une barre oblique à la fin d'un fichier *_DIR de la valeur de la variable serait une subversion des attentes.

En ce qui concerne l'achèvement de l'onglet, on s'attend à ce que vous alliez en ce répertoire. Ainsi, l'assistance fournie par l'achèvement de l'onglet consiste à vous faire entrer dans ce répertoire afin que vous puissiez faire le choix suivant en fonction de son contenu.

(référence des commentaires : Idées fausses sur les chemins d'accès aux fichiers , de Wikipédia Talk:Path_(computing) page. Nous vous remercions, john c. j. )

Il convient de noter que ce n'est pas parce que c'est mal que les outils, les paquets et les bibliothèques ne le font jamais. Il est bien trop fréquent que ces outils ajoutent une barre oblique de fin de ligne alors qu'il n'y en a pas. Par conséquent, comme Bevan y Paul F Il est conseillé, lors de l'utilisation d'outils tiers, de supprimer les barres obliques de fin qui peuvent exister dans les noms de répertoire.

Inodes Unix

L'inode (nœud d'index) est une structure de données dans un système de fichiers de type Unix qui décrit un objet du système de fichiers tel qu'un fichier ou un répertoire.

-- https://en.wikipedia.org/wiki/Inode

Norme de hiérarchie des systèmes de fichiers

Les pour le système de fichiers Unix (Filesystem Hierarchy Standard, AKA FHS) montrent clairement que les répertoires ne sont pas considérés comme ayant une barre oblique de fin, mais que le contenu du répertoire commence par une barre oblique (la seule exception à cette règle est la suivante / car nous ne ferons pas référence à la racine du système de fichiers en utilisant une chaîne vide ... et de toute façon, on ne devrait jamais y créer de fichiers).

-- http://www.pathname.com/fhs/pub/fhs-2.3.html

-- https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

28voto

Johan Soderberg Points 976

Je n'inclus pas la barre oblique de fin lorsque je définis, par exemple, un répertoire pour stocker des fichiers. En effet, je l'utiliserai comme

$store_file = "$store_path/$file_id";

J'ajouterai toujours une barre oblique avant d'utiliser une variable censée contenir un chemin d'accès à un répertoire. Je pense qu'il est préférable de toujours en ajouter une plutôt que de se demander si la barre oblique est incluse.

9voto

PaulJWilliams Points 11641

Oui, cela devrait être le cas :

Chemin d'accès + nom de fichier = emplacement complet du fichier.

La barre oblique entre le dernier répertoire et le nom de fichier doit donc se trouver soit à la fin du nom de chemin, soit au début du nom de fichier. Le fait de préfixer les noms de fichiers par un / signifie que vous devez en tenir compte si vous souhaitez simplement ouvrir un fichier (c'est-à-dire si vous supposez qu'un nom de fichier non qualifié se trouve dans le répertoire de travail actuel).

8voto

jerryjvl Points 9310

Chaque fois que je stocke des chemins d'accès à des répertoires ou que je les renvoie à partir d'API, j'essaie de respecter la convention qui consiste à conserver une barre oblique finale. Cela permet d'éviter l'ambiguïté "s'agit-il d'un fichier ou d'un répertoire".

Addendum :
Il ne s'agit pas d'un substitut à l'utilisation de méthodes qui peuvent tolérer une barre oblique ou son absence. Même en utilisant cette convention, j'utilise toujours Path.Combine(...) et autres méthodes similaires.

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