0

我正在尝试使用 dirent.h 显示 Windows 路径中的所有文件和子目录,这是我到目前为止的代码:

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 上尝试它,该目录有两个子目录,每个子目录都有一个文件,并且该函数陷入无限递归并\.\.\.\.\.\.无限显示。如果我设置条件来检查名称是否为“。” 或“..”,如果不做任何事情,一切都会按计划进行。那么这些点是什么?

4

1 回答 1

3

这些点是目录或至少是指向目录的链接:每个目录至少包含两个子目录:“.” 和“..”:“。” directory 指向当前目录本身,“..”目录指向父目录。在 Windows 上,这两个目录在资源管理器中都不可见,但您可以使用命令提示符显示它们并输入“dir”。顺便说一句:在 linux 系统上,您可以通过在几乎任何 shell 中输入“ls -a”来显示它们。

于 2014-02-16T18:30:03.757 回答