Как получить файл с расширением .txt в папке без использования opendir и stat с использованием программирования на C? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть папка с именем TestProgram, в которой я хочу узнать, существует ли внутри папки файл с именем a.txt или нет.Как я полагаю, сделать это без использования функций opendir и stat, но используя fopen в C-программировании?

Я пытался искать на форумах, где есть множество решений, включенных в каталог и stat (), так как я не хочу использовать opendir () и stat ().

1 Ответ

1 голос
/ 19 сентября 2019

Объедините имя каталога с именем файла, а затем попробуйте 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() чтобы имя не было усечено.Когда массив имен путей настолько велик, а имена малы, в этом нет необходимости, но если вы не уверены в размере каталога и имени файла, вам следует выполнить тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...