Получение списка файлов в каталоге
Я работаю над проектом 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).