0
Мой код C для рекурсивного перечисления каталогов и файлов выполняется несколько раз. Я не уверен, как это исправить и почему это происходит ... Это не бесконечно, как 10 раз показывает текущий каталог.Рекурсивный список каталогов и файлов C
void printdir(char *dir, int depth)
{
DIR *dp;
struct dirent *entry;
struct stat statbuf;
int spaces = depth;
dp = opendir(dir);
while((entry = readdir(dp))) {
lstat(entry->d_name,&statbuf);
if(S_ISDIR(statbuf.st_mode)) {
/* Found a directory, but ignore . and .. */
if(strcmp(".",entry->d_name) == 0 ||
strcmp("..",entry->d_name) == 0)
continue;
printf("%*s%s/\n",spaces,"",entry->d_name);
/* Recurse at a new indent level */
printdir(entry->d_name,depth+1);
}
else printf("%*s%s\n",spaces,"",entry->d_name);
}
closedir(dp);
}
int print_file(char *file, char *dir, struct stat buf, int showinode, int showlong, int showRec)
{
if (showinode)
printf("%lld ", buf.st_ino);
if (showlong)
print_long(file, dir, buf);
if (showRec)
printdir(dir, 0);
else
printf("%s\n", file);
return 0;
}
Вам не нужно беспокоиться о проблемах 'lstat (entry-> d_name, & statbuf);' follow 'if (S_ISDIR (statbuf.st_mode)) '. Как я упоминал в комментарии к предыдущей публикации, достаточно проверить 'if (entry-> d_type == DT_DIR)'. Информация уже находится в структуре 'entry'. – lurker
О, я вижу ,,, Позвольте мне удалить его. –
По-прежнему не повезло, он повторяет несколько раз –