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





Одна из причин - совместимость: любой, кто выполнил «проверку существования», знает, что нужно исключать каталоги; изменение этого поведения может сбить с толку тех, кто полагается на это поведение.
Во-вторых, базовый код часто проверяет наличие в операционной системе записей файловой системы в каталоге файловой системы - для ОС каталог - это то же самое, что и файл. Другими словами, он ищет в каталоге запись «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 заключается в том, что "все это файл". Это в некоторой степени повлияло и на другие среды.