Почему метод «файл существует» на многих языках возвращает истину для каталога?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
289
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

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

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

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

  • file_exists() вернет TRUE для файлов, каталогов и символических ссылок
  • is_file() вернет TRUE для файлов, но FALSE для каталогов и символьных ссылок
  • is_dir() вернет TRUE для каталогов, но FALSE для файлов и символьных ссылок
  • is_link() вернет ИСТИНА для символических ссылок, но ЛОЖЬ для файлов и каталогов.

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

Files (or links to files) can be located in directories. However, more generally, a directory can contain either a list of files or a list of links to files. Within this definition, it is of paramount importance that the term "file" includes directories. This permits the existence of directory hierarchies, i.e., directories containing subdirectories.

Из Википедии, 'Компьютерный файл'

Часть философии Unix заключается в том, что "все это файл". Это в некоторой степени повлияло и на другие среды.

Другие вопросы по теме