2014-02-16 343 views
0

我试图使用dirent.h显示所有在Windows路径的所有文件和子目录,这是我到目前为止的代码:为什么这些点出现(C++ 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

http://stackoverflow.com/questions/8411931/what-does-dot-and-dotdot-means – user2120666

+0

你能告诉我,如果检查点和dotdot的名称是一个很好的做法,或者我应该做别的吗? – user2419750

回答

2

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

+0

你能解释一下“。”背后的逻辑究竟是什么。目录是?我不明白如何将它存储在文件夹中有任何意义。 – Tara