Por que não um "arquivo existe" método em muitas línguas retornar true para um diretório?
-
09-06-2019 - |
Pergunta
Eu sei que não em PHP, e eu tenho certeza que ele faz em Java.Eu não usei as versões mais recentes .NET, por isso não vou falar por eles.Parece muito estranho, mas eu estava me perguntando se havia uma razão subjacente a esta.
Solução
Uma razão é a compatibilidade, qualquer pessoa que tenha feito "verificar existência' sabe para excluir diretórios;mudando esse comportamento pode confundir aqueles que dependem desse comportamento.
Em segundo lugar, o código subjacente, muitas vezes, faz uma verificação no sistema operativo para a existência de um catlog de sistema de arquivos de entradas para o sistema operacional, um diretório é o mesmo que um arquivo.Em outras palavras, ele está olhando para uma entrada de 'xyz' no catálogo e não um arquivo com o nome 'xyz' no catálogo.
Compatibilidade com versões anteriores é a principal razão, eu suspeito.
Outras dicas
Há também uma razão formal por um diretório é um arquivo de:
Arquivos (ou links para arquivos) pode ser localizado em diretórios.No entanto, mais geralmente, um diretório pode conter uma lista de arquivos ou lista de links para os arquivos.Dentro deste definição, é de suma importância que o termo "arquivo" inclui diretórios.Isso permite que o existência de hierarquias de diretório, por exemplo, diretórios contendo subdiretórios.
Origem: Wikipédia, 'Arquivo de computador'
É comum o uso de um "arquivo existe" função para verificar se um caminho antes de gravá-lo.Neste caso de uso do tipo de arquivo é irrelevante, se existe um diretório chamado "/home/foo", você não será capaz de criar um arquivo chamado "/home/foo"
Também o PHP, uma das linguagens que você mencionou, fornece várias funções, dependendo de que tipo(s) de arquivo que você se preocupa com:
file_exists()
irá retornar TRUE para arquivos, diretórios, e links simbólicosis_file()
irá retornar TRUE para arquivos, mas FALSO para diretórios, e links simbólicosis_dir()
irá retornar TRUE para diretórios, mas FALSO para arquivos e links simbólicosis_link()
irá retornar TRUE para links simbólicos, mas FALSOS para arquivos e diretórios
Parte do Unix é que a filosofia "tudo é um arquivo".Isso tem influenciado outros ambientes, como também algum grau.