Есть ли лучший способ, чем просто попытаться открыть файл?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
fopen()
/ fclose()
заключается в том, что вы не сможете открыть файл для чтения, даже если он существует. Например, /dev/kmem
существует, но большинство процессов не может открыть его даже для чтения. /etc/shadow
еще один такой файл. Конечно, оба stat()
и access()
полагаются на возможность доступа к каталогу, содержащему файл; все ставки отключены, если вы не можете сделать это (нет разрешения на выполнение для каталога, содержащего файл).
if (file = fopen(fname, "r"))
даст предупреждение. Используйте круглые скобки в операторе ifif ((file = fopen(fname, "r")))