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

0

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

  • 2
    stackoverflow.com/questions/8411931/...
  • 0
    Можете ли вы сказать мне, если проверка имени для точки и точки является хорошей практикой, или я должен сделать что-то еще?
Теги:
directory
dirent.h

1 ответ

2
Лучший ответ

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

  • 0
    Можете ли вы объяснить, что именно за логикой стоит "." каталог есть? Я не понимаю, как хранить это в папке имеет смысл.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню