Есть ли лучший способ, чем просто попытаться открыть файл?
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")))