这是一个递归版本:
#include <unistd.h>#include <sys/types.h>#include <dirent.h>#include <stdio.h>#include <string.h>void listdir(const char *name, int indent){ DIR *dir; struct dirent *entry; if (!(dir = opendir(name))) return; while ((entry = readdir(dir)) != NULL) { if (entry->d_type == DT_DIR) { char path[1024]; if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) continue; snprintf(path, sizeof(path), "%s/%s", name, entry->d_name); printf("%*s[%s]n", indent, "", entry->d_name); listdir(path, indent + 2); } else { printf("%*s- %sn", indent, "", entry->d_name); } } closedir(dir);}int main(void) { listdir(".", 0); return 0;}


