为什么许多语言中的“文件存在”方法对目录返回 true?
-
09-06-2019 - |
题
我知道它在 PHP 中是这样的,而且我很确定它在 Java 中也是如此。我没有使用过最新版本的.NET,所以我不会为他们说话。这看起来很尴尬,但我想知道这是否有根本原因。
解决方案
原因之一是兼容性——任何做过“检查存在”的人都知道排除目录;改变这种行为可能会让那些依赖这种行为的人感到困惑。
其次,底层代码通常会检查操作系统是否存在文件系统条目目录 - 对于操作系统来说,目录与文件相同。换句话说,它正在目录中查找“xyz”条目,而不是目录中名为“xyz”的文件。
我怀疑向后兼容性是主要原因。
其他提示
目录之所以是文件还有一个正式的原因:
文件(或文件链接)可以位于目录中。但是,更一般而言,目录可以包含文件列表或文件链接列表。在此定义中,“文件”一词包括目录至关重要。这允许存在包含子目录的目录层次结构,即目录。
来自维基百科, '电脑文件'
在写入路径之前,通常使用“文件存在”函数来检查路径。在此用例中,文件类型无关紧要,如果有一个名为“/home/foo”的目录,您将无法创建名为“/home/foo”的文件
此外,PHP(您提到的语言之一)根据您关心的文件类型提供了多种功能:
file_exists()
对于文件、目录和符号链接将返回 TRUEis_file()
对于文件将返回 TRUE,但对于目录和符号链接将返回 FALSEis_dir()
对于目录将返回 TRUE,但对于文件和符号链接将返回 FALSEis_link()
对于符号链接返回 TRUE,对于文件和目录返回 FALSE
Unix 哲学的一部分是“一切都是文件”。这在某种程度上也影响了其他环境。
不隶属于 StackOverflow