¿Por qué un método "el archivo existe" en muchos idiomas devuelve verdadero para un directorio?

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

Pregunta

Sé que funciona en PHP y estoy bastante seguro de que funciona en Java.No he usado las últimas versiones de .NET, así que no hablaré por ellas.Parece muy incómodo, pero me preguntaba si había una razón subyacente para esto.

¿Fue útil?

Solución

Una razón es la compatibilidad: cualquiera que haya "comprobado la existencia" sabe excluir directorios;cambiar ese comportamiento puede confundir a quienes confían en ese comportamiento.

En segundo lugar, el código subyacente a menudo verifica la existencia del sistema operativo en un catálogo de entradas del sistema de archivos: para el sistema operativo, un directorio es lo mismo que un archivo.En otras palabras, busca una entrada de 'xyz' en el catálogo, no un archivo con el nombre 'xyz' en el catálogo.

Sospecho que la compatibilidad con versiones anteriores es la razón principal.

Otros consejos

También hay una razón formal por la que un directorio es un archivo:

Los archivos (o enlaces a archivos) se pueden ubicar en directorios.Sin embargo, más generalmente, un directorio puede contener una lista de archivos o una lista de enlaces a los archivos.Dentro de esta definición, es de suma importancia que el término "archivo" incluya directorios.Esto permite la existencia de jerarquías de directorio, es decir, directorios que contienen subdirectorios.

De Wikipedia, 'Archivo de computadora'

Es común utilizar una función de "el archivo existe" para verificar una ruta antes de escribir en ella.En este caso de uso el tipo de archivo es irrelevante, si hay un directorio llamado “/home/foo” no podrás crear un archivo llamado “/home/foo”

Además, PHP, uno de los lenguajes que mencionaste, proporciona varias funciones dependiendo del tipo de archivo que te interese:

  • file_exists() devolverá VERDADERO para archivos, directorios y enlaces simbólicos
  • is_file() devolverá VERDADERO para archivos, pero FALSO para directorios y enlaces simbólicos
  • is_dir() devolverá VERDADERO para directorios, pero FALSO para archivos y enlaces simbólicos
  • is_link() devolverá VERDADERO para enlaces simbólicos, pero FALSO para archivos y directorios

Parte de la filosofía Unix es que "todo es un archivo".Esto también ha influido hasta cierto punto en otros entornos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top