Объедините имя каталога с именем файла, а затем попробуйте fopen()
файл:
const char directory[] = "TestProgram";
const char filename[] = "a.txt";
char pathname[1024];
snprintf(pathname, sizeof(pathname), "%s/%s", directory, filename);
FILE *fp = fopen(pathname, "r");
if (fp == NULL)
printf("File %s does not exist\n", pathname);
else
{
printf("File %s exists and is readable\n", pathname);
fclose(fp);
}
Вы также можете использовать access(pathname, F_OK)
, чтобы проверить, существует ли файл, хотя он слегкадругой тест при некоторых особых обстоятельствах.Они применяются только в том случае, если запущенная программа имеет SUID;он проверяет, может ли реальный UID вместо эффективного UID - или реальный GID, или одно из вспомогательных значений GID вместо эффективного GID - получить доступ к файлу.
Код должен проверять возвращаемое значение из snprintf()
чтобы имя не было усечено.Когда массив имен путей настолько велик, а имена малы, в этом нет необходимости, но если вы не уверены в размере каталога и имени файла, вам следует выполнить тестирование.