¿Hay una mejor manera que simplemente intentar abrir el archivo?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
fopen()
/ fclose()
es que es posible que no pueda abrir un archivo para leerlo aunque exista. Por ejemplo, /dev/kmem
existe, pero la mayoría de los procesos no pueden abrirlo ni siquiera para leer. /etc/shadow
es otro de esos archivos. Por supuesto, tanto stat()
y access()
confiar en la posibilidad de acceder al directorio que contiene el archivo; todas las apuestas están desactivadas si no puede hacerlo (sin permiso de ejecución en el directorio que contiene el archivo).
if (file = fopen(fname, "r"))
Dará una advertencia. Use paréntesis alrededor de la declaración dentro de la declaración ifif ((file = fopen(fname, "r")))