Existe uma maneira melhor do que simplesmente tentar abrir o arquivo?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
fopen()
/ fclose()
é que você talvez não consiga abrir um arquivo para leitura, mesmo que ele exista. Por exemplo, /dev/kmem
existe, mas a maioria dos processos não pode abri-lo nem para leitura. /etc/shadow
é outro desses arquivos. Obviamente, ambos stat()
e access()
dependem de poder acessar o diretório que contém o arquivo; todas as apostas estão desativadas se você não puder fazer isso (sem permissão de execução no diretório que contém o arquivo).
if (file = fopen(fname, "r"))
dará um aviso. Use parênteses ao redor da instrução dentro da instrução ifif ((file = fopen(fname, "r")))