Pourquoi une méthode « le fichier existe » dans de nombreuses langues renvoie-t-elle vrai pour un répertoire ?

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

Question

Je sais que c'est le cas en PHP, et je suis presque sûr que c'est le cas en Java.Je n'ai pas utilisé les dernières versions de .NET, je ne parlerai donc pas en leur nom.Cela semble très gênant, mais je me demandais s'il y avait une raison sous-jacente à cela.

Était-ce utile?

La solution

L'une des raisons est la compatibilité : toute personne ayant effectué une « vérification d'existence » sait exclure les répertoires ;changer ce comportement peut dérouter ceux qui comptent sur ce comportement.

Deuxièmement, le code sous-jacent vérifie souvent l'existence du système d'exploitation dans un catalogue d'entrées du système de fichiers - pour le système d'exploitation, un répertoire est identique à un fichier.En d’autres termes, il recherche une entrée « xyz » dans le catalogue et non un fichier portant le nom « xyz » dans le catalogue.

La compatibilité ascendante est la raison principale, je suppose.

Autres conseils

Il existe également une raison formelle pour laquelle un répertoire est un fichier :

Les fichiers (ou les liens vers des fichiers) peuvent être situés dans les répertoires.Cependant, plus généralement, un répertoire peut contenir une liste de fichiers ou une liste de liens vers des fichiers.Dans cette définition, il est d'une importance primordiale que le terme "fichier" comprend des répertoires.Cela permet l'existence de hiérarchies d'annuaire, c'est-à-dire des répertoires contenant des sous-répertoires.

De Wikipédia, 'Fichier informatique'

Il est courant d'utiliser une fonction « le fichier existe » pour vérifier un chemin avant d'y écrire.Dans ce cas d'utilisation, le type de fichier n'a pas d'importance, s'il existe un répertoire appelé "/home/foo", vous ne pourrez pas créer un fichier appelé "/home/foo".

PHP également, l'un des langages que vous avez mentionnés, fournit plusieurs fonctions en fonction du ou des types de fichiers qui vous intéressent :

  • file_exists() renverra TRUE pour les fichiers, répertoires et liens symboliques
  • is_file() renverra TRUE pour les fichiers, mais FALSE pour les répertoires et les liens symboliques
  • is_dir() renverra TRUE pour les répertoires, mais FALSE pour les fichiers et les liens symboliques
  • is_link() renverra TRUE pour les liens symboliques, mais FALSE pour les fichiers et répertoires

Une partie de la philosophie d'Unix est que "tout est un fichier".Cela a également influencé d’autres environnements dans une certaine mesure.

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