2008-09-08 7 views
1

Я знаю, что это происходит в PHP, и я уверен, что это происходит на Java. Я не использовал последние версии .NET, поэтому я не буду говорить за них. Это кажется очень неудобным, но мне было интересно, есть ли причина для этого.Почему метод «файл существует» на многих языках возвращает true для каталога?

ответ

3

Одна из причин совместимости - любой, кто сделал «проверка на существование», знает, что исключает каталоги; изменение этого поведения может смутить тех, кто полагается на это поведение.

Во-вторых, базовый код часто выполняет проверку операционной системы на наличие в catlog записей в файловой системе - в ОС, каталог такой же, как файл. Другими словами, он ищет запись «xyz» в каталоге, а не файл с именем «xyz» в каталоге.

Обратная совместимость является основной причиной, я подозреваю.

1

Общепринято использовать функцию «файл существует», чтобы проверить путь до его записи. В этом случае тип файла не имеет значения, если есть каталог под названием «/ home/foo», вы не сможете создать файл с именем «/ home/foo»

Также PHP, один из языки вы упомянули, обеспечивают несколько функций, в зависимости от того, какого вида (ы) файла, который вы заботитесь о:

  • file_exists() возвратит TRUE, файлы, каталоги и символические ссылки
  • is_file() возвратит значение TRUE для файлов, но FALSE для справочники и сим-ссылки
  • is_dir() вернет TRUE для дирекции s, но FALSE для файлов и симво ссылки
  • is_link() возвратит TRUE, для символических ссылок, но FALSE для файлов и каталогов
2

Существует также формальная причина, почему каталог является файлом:

Файлы (или ссылки на файлы) могут быть , расположенные в каталогах. Однако, более , как правило, каталог может содержать либо список файлов, либо список ссылок на файлы. В пределах этого определения значение имеет важное значение, поскольку термин «файл» включает в себя каталоги. Это позволяет создавать иерархии каталогов , т. Е. Каталоги, содержащие подкаталоги.

Материал из Википедии, ‘Computer file’

0

Часть философии Unix является то, что "everything is a file". Это также повлияло на другие среды.