Я пытаюсь отобразить все файлы и подкаталоги в пути Windows, используя dirent.h, и это мой код:
void print_dir(char* path, char* subdir)
{
char full_path[MAX_PATH];
concat_path(full_path, path, subdir);
DIR *dir;
struct dirent *ent;
if ((dir = opendir (full_path)) != NULL) {
/* print all the files and directories within directory */
while ((ent = readdir(dir)) != NULL) {
if(is_dir(full_path, ent->d_name)){
printf ("DIR %s\\%s\n",full_path, ent->d_name);
print_dir(full_path, ent->d_name);
}
else{
printf ("%s\\%s\n",full_path, ent->d_name);
}
}
closedir (dir);
} else {
/* could not open directory */
perror ("");
}
}
Я пытаюсь использовать его в каталоге D:\test, который имеет два подкаталога с файлом в каждом из них и функция застревает в бесконечной рекурсии и отображает \.\.\.\.\.\.
бесконечно. Если я поставлю условие, чтобы проверить, является ли имя "." или "..", и если это ничего не значит, все работает так, как планировалось. Итак, каковы эти точки?
Эти точки - это каталоги или, по крайней мере, ссылки на каталоги: каждый каталог содержит как минимум два подкаталога: "." и "..": "." каталог указывает текущий каталог, а каталог ".." указывает на родительский каталог. В окнах оба каталога не отображаются в проводнике, но вы можете показать их с помощью командной строки и ввести "dir". BTW: в системах Linux вы можете отображать их, введя "ls -a" почти в любой оболочке.