在目录中搜索文件夹

时间:2017-11-13 11:05:23

标签: c++ linux directory dirent.h

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

 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作为file_path,它不会打印任何东西。任何想法如何解决它?提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

例如,如果您有./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
   {
       ...