我知道它在 PHP 中是这样的,而且我很确定它在 Java 中也是如此。我没有使用过最新版本的.NET,所以我不会为他们说话。这看起来很尴尬,但我想知道这是否有根本原因。

有帮助吗?

解决方案

原因之一是兼容性——任何做过“检查存在”的人都知道排除目录;改变这种行为可能会让那些依赖这种行为的人感到困惑。

其次,底层代码通常会检查操作系统是否存在文件系统条目目录 - 对于操作系统来说,目录与文件相同。换句话说,它正在目录中查找“xyz”条目,而不是目录中名为“xyz”的文件。

我怀疑向后兼容性是主要原因。

其他提示

目录之所以是文件还有一个正式的原因:

文件(或文件链接)可以位于目录中。但是,更一般而言,目录可以包含文件列表或文件链接列表。在此定义中,“文件”一词包括目录至关重要。这允许存在包含子目录的目录层次结构,即目录。

来自维基百科, '电脑文件'

在写入路径之前,通常使用“文件存在”函数来检查路径。在此用例中,文件类型无关紧要,如果有一个名为“/home/foo”的目录,您将无法创建名为“/home/foo”的文件

此外,PHP(您提到的语言之一)根据您关心的文件类型提供了多种功能:

  • file_exists() 对于文件、目录和符号链接将返回 TRUE
  • is_file() 对于文件将返回 TRUE,但对于目录和符号链接将返回 FALSE
  • is_dir() 对于目录将返回 TRUE,但对于文件和符号链接将返回 FALSE
  • is_link() 对于符号链接返回 TRUE,对于文件和目录返回 FALSE

Unix 哲学的一部分是“一切都是文件”。这在某种程度上也影响了其他环境。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top