在目录中搜索文件夹

searching a directory for folders

我正在尝试编写一个程序来获取文件夹的路径并打印其中的目录名称。 这是我的代码:

 if ((dir = opendir (file_path)) != NULL) 
 {
    while ((ent = readdir (dir)) != NULL) 
    {
       if (stat(ent->d_name, &dir_stat)== 0) 
       {
         if( dir_stat.st_mode & S_IFDIR )
         {
            if(strncmp(ent->d_name, "." ,sizeof(ent->d_name)) != 0
                  && strncmp(ent->d_name, "..",sizeof(ent->d_name)) != 0)
                cout<<"dir : "<< ent->d_name<<endl;
         }

       }
   }
 }

现在的问题是,当我给它“.”时作为 file_path 它可以正常工作,但是当我给它 ./folder as file_path 时,它不会打印任何内容。任何想法如何解决它?提前致谢。

问题是 readdir() returns 子目录的名称,而不是到达它们的路径。

例如,如果您有一个 ./folder/sub,那么在读取 ./folder 时,您将只得到 sub 作为名称。然后,做一个 stat("sub") 是行不通的,你必须连接你正在阅读的目录:

while ((ent = readdir (dir)) != NULL) 
{
   std::string path = dir;
   path += ent->d_name;
   if (stat(path.c_str(), &dir_stat)== 0) 
   {

在系统调用后添加一些 perror() 调用通常是个好主意:

   if (stat(path.c_str(), &dir_stat) < 0) 
       perror(path.c_str());
   else
   {
       ...