Получение списка файлов в каталоге

Я работаю над проектом C, где мне нужно получить список файлов, которые находятся в каталоге. Я использую dirent.h, но у меня возникли некоторые проблемы, заставляющие его работать, я собираю программу под Linux.

Когда я пытаюсь собрать программу, я получаю следующую ошибку

myClass:error: âDIRâ undeclared (first use in this function)
myClass:408: error: (Each undeclared identifier is reported only once
myClass:408: error: for each function it appears in.)
myClass:408: error: âdirâ undeclared (first use in this function)
myClass:410: warning: implicit declaration of function âopendirâ
myClass:413: warning: implicit declaration of function âreaddirâ
myClass:413: warning: assignment makes pointer from integer without a cast
myClass:415: error: dereferencing pointer to incomplete type
myClass:417: warning: implicit declaration of function âclosedirâ

Ниже приведен код, который я использую

int logMaintenance(void *arg)
{
    DIR *dir;
    struct dirent *ent;
    dir = opendir(directory);
    if (dir != NULL)
    {
        while ((ent = readdir (dir)) != NULL)
        {
            printf("%s\n", ent->d_name);
        }
        closedir(dir);
    }
    else
    {
        printf("Failed to read directory %i", EXIT_FAILURE);
    }
    return 0;
}

Я не понимаю, что означают эти ошибки, особенно когда говорится, что DIR не объявлен, когда я включил заголовочный файл dirent.h для Liunux.

Спасибо за вашу помощь.

2 ответа

Решение

Вы должны убедиться, что:

  • Вы #include <dirent.h>, скорее, чем "dirent.h", так что системный путь поиска для заголовков используется, чтобы найти этот файл
  • У вас нет dirent.h файл, лежащий где-то в вашем проекте, который можно было бы взять вместо этого.

При попытке отладить этот тип странной проблемы, попросите GCC предварительно обработанный вывод с gcc -E, Вы можете увидеть, какие файлы (включая пути) он включает. Это может очень помочь.

И если вы используете Microsoft Visual Studio, перейдите к следующему вопросу:
Microsoft Visual Studio: opendir () и readdir(), как?

Я не уверен, но мне кажется, мне всегда говорили, что вам всегда нужна основная функция... Однако у меня всего 8 месяцев (2 семестра) C++ под моим поясом. Я просто практикую это, чтобы быть безопасным, однако, я бы также использовал:

int main(int argc, char **argv) или жеint main(int argc, char *argv[]) скорее, чемint logMaintenance(void *arg)

(при использовании dirent.h).

Другие вопросы по тегам