Windows — Почему эти точки появляются (c ++ dirent.h)

Я пытаюсь отобразить все файлы и подкаталоги в пути 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, в котором есть два подкаталога с файлом в каждом из них, а функция застревает в бесконечной рекурсии и отображает \.\.\.\.\.\. бесконечно. Если я поставлю условие, чтобы проверить, если имя «.» или «..», и если он ничего не делает, все работает по плану. Так что же это за точки?

0

Решение

Эти точки являются каталогами или, по крайней мере, ссылками на каталоги: каждый каталог содержит как минимум две подкаталоги: «.» и «..»: «.» каталог указывает на текущий каталог, а каталог «..» указывает на родительский каталог. В Windows оба каталога не отображаются в проводнике, но вы можете показать их с помощью командной строки и ввести «dir».
Кстати, в системах Linux вы можете отобразить их, введя «ls -a» практически в любой оболочке.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector