¿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/kmemexiste, pero la mayoría de los procesos no pueden abrirlo ni siquiera para leer. /etc/shadowes 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")))