Por que não um "arquivo existe" método em muitas línguas retornar true para um diretório?

StackOverflow https://stackoverflow.com/questions/50148

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.

Foi útil?

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ólicos
  • is_file() irá retornar TRUE para arquivos, mas FALSO para diretórios, e links simbólicos
  • is_dir() irá retornar TRUE para diretórios, mas FALSO para arquivos e links simbólicos
  • is_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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top