Je continue à me mettre en nœuds lorsque je manipule des chemins et des noms de fichiers, car je n'ai pas de système de nommage commun que j'utilise.
Je dois trouver une norme de dénomination et la respecter, et je voudrais être clair et cohérent avec les autres, donc je m'ouvre pour apprendre les réponses canoniques.
Considérez ce problème de jouet: (exemple Windows, mais j'espère que la réponse devrait être indépendante de la plateforme)
Vous avez reçu le nom complet d'un dossier: C: \ users \ OddThinking \ Documents \ My Source. Vous voulez parcourir les dossiers en dessous et compiler tous les fichiers .src en .obj.
À un moment donné, vous regardez la chaîne suivante.
C:\users\OddThinking\Documents\My Source\Widget\foo.src
Alors, quels noms d'identifiants utiliseriez-vous pour les pièces?
A) foo
B) foo.src
C) src
D) .src
E) C:\users\OddThinking\Documents\My Source\ - i.e. the top of the tree.
F) Widget\foo.src - i.e. the path from the top of the tree to the leaf.
G) Widget - i.e. one node of the tree.
H) C:\users\OddThinking\Documents\My Source\Widget\ - i.e. the name of the folder
I) C:\users\OddThinking\Documents\My Source\Widget\foo.src
Permettez-moi de donner quelques réponses, pour commencer.
A) nom de base?
B) nom de fichier? Ou est-ce un nom de fichier? La différence est importante lors du choix des noms d'identifiants, et je ne suis jamais cohérent ici.
C) Extension
D) Extension. Attendez, c'est ce que j'ai appelé C. Dois-je éviter de stocker le point, et simplement le mettre en cas de besoin? Et s'il n'y a pas de point sur un fichier particulier?
H) nom du chemin? Ou attendez, est-ce juste le chemin?
I) nom de fichier. Attendez, c'est ce que j'ai appelé C. Path. Attendez, c'est ce que j'ai appelé H. Peut-être que H devrait être le nom du dossier. Mais "dossier" n'est-il pas un terme propre à Windows?
la source
stem
.Réponses:
Je pense que votre recherche d'une convention de dénomination "standard" sera vaine. Voici mes propositions, basées sur des programmes existants et bien connus:
A) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
B) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
C) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (sans point)
D) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (avec point)
E) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
F) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
G) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
H) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
I) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
la source
1.
(nom de fichier uniquement sans extension), j'ai décidé d'y allerFile Title
il y a longtemps en raison de l'absence d'une convention claire ou du moins d'un consensus mondial.A
(nom de fichier sans extension), vous pouvez utiliserstem
. Références: doc.rust-lang.org/std/path/struct.Path.html#method.file_stem , llvm.org/docs/doxygen/html/… , boost.org/doc/libs/1_60_0/libs/filesystem/ doc /…Bonne question tout d'abord, mon +1. Cette chose m'a dérangé quand j'ai dû créer une multitude de fonctions dans la classe Utility une fois. GetFileName? ou GetFullName? GetApplicationPath signifie le chemin complet ou le nom du répertoire? etc. Je viens de l'arrière-plan .NET, donc je pense que je peux ajouter un peu plus à une excellente réponse par @blinry.
Résumé: (en italique est ce que je n'utiliserais pas en tant que programmeur)
Path : Path spécifie un emplacement unique dans le système de fichiers (à moins que son chemin relatif). Le nom du chemin est moins souvent utilisé, mais je m'en tiendrai au chemin - il explique à peu près ce que c'est. Le chemin peut pointer vers un fichier ou un dossier ou même rien (C: \). Le chemin peut être:
My Source\Widget\
est le chemin relatif ainsi queWidget\foo.src
. Explicite.C:\users\OddThinking\Documents\My Source\Widget\foo.src
est donc chemin complet. Voir à la fin ce que j'appelle le chemin complet qui pointe vers un fichier et qui se termine comme un répertoire.La page wiki et la dénomination .NET pour le chemin d' accès sont cohérentes.
Chemin racine ou répertoire racine : l'ancien est la convention .NET tandis que le second est plus entendu dans les cercles UNIX. Bien que j'aime les deux, j'ai tendance à utiliser le premier plus. Dans Windows, contrairement à UNIX, il existe de nombreux chemins racine différents, un pour chaque partition. Les systèmes Unix ont un répertoire racine qui contient des informations sur d'autres répertoires et fichiers. Par exemple.
C:\
est le chemin racine.Dossier ou Nom du dossier :
Widget
,OddThinking
etc dans votre cas. Cela pourrait être une convention Windows uniquement (en fait, c'est ma propre pensée étrange :)), néanmoins je m'oppose fortement à la réponse de Blinry "Directory". Bien que pour un répertoire utilisateur normal, cela signifie la même chose qu'un dossier (comme les sous-dossiers, les sous-répertoires), je pense que d'un point de vue technique, le "répertoire" devrait ressembler à une adresse qualifiée pour la cible et non la cible elle-même. Plus ci-dessous.users
OddThinking
etDocuments
sont des sous-dossiers.users
OddThinking\
,OddThinking\Documents\
etOddThinking\Documents\My Source\Widget\
sont des sous - répertoires. Mais nous n'avons pas souvent besoin de nous en préoccuper, n'est-ce pas?users
OddThinking
un dossier enfant (ainsi qu'un sous-dossier)OddThinking
users
c'est son dossier parent (juste en mentionnant différentes terminologies, ce n'est pas grave).Répertoire ou nom de répertoire : le premier à utiliser généralement dans la vie réelle, le second à être en code. Il s'agit du chemin d' accès complet (ou simplement du chemin d'accès complet ) jusqu'au dossier parent de la cible . Dans votre cas,
C:\users\OddThinking\Documents\My Source\Widget
(Oui, un répertoire n'est jamais destiné à pointer vers un fichier). J'utilise le nom du répertoire dans mon code car le répertoire est une classe en .NET et le nom du répertoire est ce que la bibliothèque elle-même appelle. Son tout à fait cohérent avec dirname utilisé dans les systèmes UNIX.Nom de fichier ou nom de base : nom du fichier avec extension. Dans votre cas:
foo.src
. Je dirais que pour une utilisation non technique, je préfère le nom de fichier (c'est ce que cela signifie pour un utilisateur final) mais à des fins techniques, je m'en tiendrai strictement au nom de base . Le nom de fichier est souvent utilisé par MS, mais je suis surpris de voir à quel point ils ne sont pas cohérents non seulement dans la documentation, mais même dans la bibliothèque . Le nom de fichier peut signifier le nom de base ou le chemin complet du fichier. Je préfère donc le nom de base, c'est ce que je les appelle en code. Cette page sur le wiki indique également que le nom de fichier peut signifier soit le chemin complet, soit le nom de base. Étonnamment, même dans .NET, je peux trouver le nom de base d'utilisation pour désigner le nom racine du fichier.Extension ou nom de fichier d' extension ou fichier d' extension : Je aime le dernier. Tout se réfère à la même chose mais qu'est-ce que c'est encore une question de débat! Wiki dit que c'est
src
à l'époque, je me souviens avoir lu que de nombreuses langues l'interprètent comme.src
. Notez le point. Donc, encore une fois, je pense que pour les utilisations occasionnelles, peu importe ce que c'est, mais en tant que programmeur, je considère toujours l'extension comme.src
.Ok, j'aurais peut-être essayé de récupérer certaines utilisations standard, mais voici deux de mes conventions que je suis. Et il s'agit de chemins complets.
J'appelle généralement un chemin complet qui pointe vers un fichier comme chemin de fichier . Pour moi, le chemin du fichier est clair, il me dit de quoi il s'agit. Bien qu'avec le nom de fichier, je le trouve comme nom de fichier, dans mon code, je l'appelle nom de fichier . Il est également cohérent avec " nom de répertoire ". Du côté technique, le nom fait référence au nom complet! Frustrant .NET utilise le terme nom de fichier (donc j'ai mon cas ici) et parfois chemin de fichier pour cela.
J'appelle un chemin complet qui se termine comme un répertoire un répertoire. En fait, on peut appeler n'importe quel morceau d'adresse qui ne pointe pas vers un fichier un répertoire. Il en
C:\users\OddThinking\Documents\My Source\
va de même pour un répertoire,C:\users\OddThinking\
un répertoire ou mêmeOddThinking\Documents\My Source\
(mieux vaut l'appeler sous-répertoire ou encore meilleur chemin relatif - tout cela dépend du contexte avec lequel vous l'utilisez). Bien au-dessus, j'ai mentionné quelque chose de différent à propos du répertoire qui est le nom du répertoire. Voici mon point de vue: j'obtiendrai un nouveau chemin pour éviter toute confusion. Qu'est-ce que c'estD:\Fruit\Apple\Pip\
? Un annuaire. Mais si la question est de savoir quel est le répertoire ou encore mieux le nom du répertoireD:\Fruit\Apple\Pip\
, la réponse estD:\Fruit\Apple\
. J'espère que c'est clair.Je dirais qu'il vaut mieux ne pas se soucier des deux derniers termes car c'est ce qui crée le plus de confusion (pour moi personnellement). Utilisez simplement le terme chemin complet !
Pour vous répondre:
par rapport au chemin que vous avez tracé
A) Aucune idée. Quoi qu'il en soit, je n'ai jamais eu besoin de l'avoir seul.
B) nom de base
C) Je l'appellerais simplement extension de fichier pour le moment, je suis moins inquiet car je n'ai jamais eu besoin de cela seul pour être nommé dans mon code.
D) extension de fichier sûrement.
E) Je ne pense pas que ce soit une exigence générale. Aucune idée. Dans .NET, le répertoire de base est identique au nom du répertoire.
F) chemin relatif
G) dossier (dossier parent du nom de base
foo.src
)H) nom du répertoire
I) chemin complet (ou même nom de fichier)
en général (désolé d'être un peu bavard, juste pour ramener le point à la maison) mais en supposant qu'il
foo.src
s'agit bien d'un fichierA) NA
B) nom de base
C) NA
D) extension
E) répertoire ou simplement chemin
F) chemin relatif
G) NA
H) répertoire ou simplement chemin
I) chemin complet (ou même nom de fichier)
Conduite plus loin avec un exemple de mon côté:
Considérez le chemin
C:\Documents and Settings\All Users\Application Data\s.sql
.C:\Documents and Settings\All Users\Application Data\s.sql
est le chemin complet (qui est un nom de fichier)C:\Documents and Settings\All Users\Application Data\
est le nom du répertoire.Considérez maintenant le chemin
C:\Documents and Settings\All Users\Application Data
C:\Documents and Settings\All Users\Application Data
est le chemin complet (qui se trouve être un répertoire)C:\Documents and Settings\All Users
est le nom du répertoire.Deux conseils à moi:
Je respecte cette règle empirique selon laquelle, lorsqu'il s'agit d'adresser une adresse complète, quel que soit son type, je l'appelle presque toujours "chemin complet". Cela élimine non seulement l'utilisation de deux terminologies pour le chemin de fichier et le chemin de dossier, mais évite également la confusion potentielle si vous allez nommer celui du fichier comme nom de fichier (qui pour la plupart des utilisateurs se traduit immédiatement par nom de base). Mais oui, si vous devez être précis sur le type de chemin, il vaut mieux nommer alors le nom de fichier ou le répertoire au lieu de "chemin" plus générique.
Quoi que ce soit, vous auriez votre propre idée en tête, soyez cohérent avec elle tout au long. Ayez un consensus parmi les membres de l'équipe que cela signifie ceci et non cela.
Maintenant que juste du cercle j'ai une certaine pratique. Une nouvelle marque de termes serait celle qui est utilisée sur OS X et les machines Android. Et tout cela ne concerne que les chemins physiques dans le système de fichiers. Un tout nouvel ensemble de terminologies apparaîtrait dans le cas des adresses Web. Je m'attends à ce que quelqu'un comble le vide dans ce même fil :) Je serais heureux d'entendre la convention avec laquelle vous avez avancé ..
la source
En C ++, Boost.Filesystem a conçu une nomenclature pour les différentes parties d'un chemin. Consultez la documentation de référence sur la décomposition des chemins pour plus de détails, ainsi que ce didacticiel .
Voici un résumé basé sur le tutoriel. Pour:
c:\foo\bar\baa.txt
/foo/bar/baa.txt
vous obtenez:
Norme C ++ ISO / IEC 14882: 2017
De plus, la terminologie Boost.Filesystem a été adoptée par C ++ 17 => Voir
std::filesystem
la source
path
,fullpath
?stem()
fait partie du nom de fichier , pas du chemin .La
pathlib
bibliothèque standard de Python a une excellente convention de dénomination pour les composants de chemin: https://docs.python.org/3/library/pathlib.htmla) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src
b) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
c) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo. src (sans point)
d) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo .src (avec point)
e) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
f) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
g) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
h) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
i) C: \ users \ OddThinking \ Documents \ My Source \ Widget \ foo.src
la source
Non tu n'es pas fou.
Dans les systèmes Windows, le chemin du répertoire contenant le fichier est parfois appelé chemin , tel qu'il était depuis le début. Ainsi, par exemple,
L'approche Unix / Linux est beaucoup plus logique, et c'est ce que tout le monde a mentionné ci-dessus: chemin incluant le nom du fichier lui-même. Cependant, si vous tapez "call /?" dans la ligne de commande Windows, vous obtenez ceci:
Voilà, "chemin uniquement" et "nom de fichier uniquement". En même temps, ils se réfèrent à la chaîne entière en tant que "nom de chemin d'accès complet", ce qui est compris comme une lettre de lecteur plus un chemin plus un nom de fichier. Il n'y a donc pas de vraie vérité. C'est futile. Vous avez été trahi.
En tous cas,
Pour répondre à ta question
Voici comment je nommerais vos exemples:
L'ADEF n'a pas de surnoms simples. Et comme php est probablement le langage multiplateforme le plus connu, tout le monde comprend "nom de base" et "nom de répertoire", donc je m'en tiendrai à cette dénomination. Le nom complet est également évident; le chemin complet serait un peu ambigu mais la plupart du temps cela signifie la même chose.
la source