Je sais que c'est en PHP, et je suis sûr que c'est en Java. Je n'ai pas utilisé les dernières versions de .NET, donc je ne parlerai pas pour eux. Cela semble très gênant, mais je me demandais s'il y avait une raison sous-jacente à cela.Pourquoi une méthode "fichier existe" dans de nombreuses langues renvoie true pour un répertoire?
Répondre
L'une des raisons est la compatibilité - quiconque a fait 'vérifier l'existence' sait exclure les répertoires; changer ce comportement peut confondre ceux qui s'appuient sur ce comportement.
Deuxièmement, le code sous-jacent effectue souvent une vérification sur le système d'exploitation pour existence dans un catlog des entrées du système de fichiers - pour le système d'exploitation, un répertoire est le même qu'un fichier. En d'autres termes, il cherche une entrée de 'xyz' dans le catalogue pas un fichier avec le nom 'xyz' dans le catalogue.
La compatibilité vers l'arrière est la raison principale, je soupçonne.
Il est courant d'utiliser une fonction "fichier existe" pour vérifier un chemin avant d'y écrire. Dans ce cas d'utilisation le type de fichier n'est pas pertinent, s'il y a un répertoire appelé "/ home/foo" vous ne pourrez pas créer un fichier appelé "/ home/foo"
Aussi PHP, l'un des langues que vous avez mentionné, fournit plusieurs fonctions selon le type (s) du fichier que vous aimez:
file_exists()
retournera TRUE pour les fichiers, répertoires et liens symboliquesis_file()
retournera TRUE pour les fichiers, mais FAUX pour répertoires et liens symboliquesis_dir()
retournera TRUE pour directorie s, mais FALSE pour les fichiers et sym liensis_link()
retourne vrai pour les liens symboliques, mais FALSE pour les fichiers et les répertoires
Il y a aussi une raison formelle pourquoi un répertoire est un fichier:
Les fichiers (ou liens vers des fichiers) peuvent être situés dans des répertoires. Cependant, plus généralement, un répertoire peut contenir soit une liste de fichiers ou une liste de liens vers des fichiers. Au sein de cette définition , il est primordial que le terme «fichier» comprenne des répertoires . Cela permet l'existence de hiérarchies de répertoires, , c'est-à-dire des répertoires contenant des sous-répertoires .
de Wikipédia, ‘Computer file’
Une partie de la philosophie Unix est que "everything is a file". Cela a également influencé d'autres environnements dans une certaine mesure.
- 1. Existe-t-il une fonction qui recherche la variable $ PATH unix et renvoie true si un certain fichier existe?
- 2. Existe-t-il une méthode pour savoir si un répertoire contient un sous-répertoire?
- 3. Est-ce que file.delete() renvoie true ou false pour un fichier inexistant?
- 4. Pourquoi mon DataTable renvoie-t-il toujours "true/false" mais jamais une chaîne?
- 5. Pourquoi Xdebug renvoie-t-il une erreur pour un fichier inclus, non requis?
- 6. Classe NSURLRequest. Méthode - (NSInputStream *) HTTPBodyStream renvoie toujours zéro. Pourquoi?
- 7. Maven pour d'autres langues?
- 8. Organisation de nombreuses formes sur de nombreuses pages
- 9. Est-ce que la méthode isSelect de QSqlQuery renvoie true lorsqu'une procédure stockée est exécutée?
- 10. PHP mkdir ($ récursive = true) saute dernier répertoire
- 11. Pourquoi ServletContext # getRealPath ("/") renvoie un chemin relatif?
- 12. Rediriger si le fichier existe dans le sous-répertoire
- 13. Existe-t-il une méthode "HasNext" pour un IEnumerator?
- 14. Existe-t-il une méthode IndexSearcher recommandée?
- 15. A ParameterizedThreadStart Question: quoi, si une méthode renvoie un objet?
- 16. Existe-t-il un bon message standard "tout s'est bien passé" dans une méthode qui renvoie des erreurs de chaîne?
- 17. Comment vérifier si un répertoire donné existe dans Ruby
- 18. Pourquoi déclarer une méthode dans une catégorie sans l'implémenter?
- 19. Pourquoi Response.Redirect ("") renvoie une erreur dans un environnement de test et pas un autre?
- 20. existe-t-il un algorithme/une référence de synchronisation disponible pour la synchronisation d'un répertoire?
- 21. Existe-t-il une bibliothèque Delphi qui renvoie tous les chemins source efficaces pour un projet?
- 22. Dans groovy, existe-t-il un moyen de vérifier si un objet a une méthode donnée?
- 23. Comment vérifier si un fichier existe dans un fichier makefile
- 24. Pourquoi utiliser une affectation dans une condition?
- 25. Pourquoi MarshalByRefObject.InitializeLifetimeService renvoie un objet et non un ILease?
- 26. mysqldump | mysql renvoie une erreur 'trop de fichiers ouverts'. Pourquoi?
- 27. Existe-t-il une fonction qui renvoie le caractère/la chaîne à un point dans un fichier .txt?
- 28. True timeout sur la méthode de requête LWP :: UserAgent
- 29. Rechercher un fichier dans le répertoire avec plusieurs répertoires
- 30. ServiceConnection :: onServiceConnected non appelé même si Context :: bindService renvoie true?