遍历目录linux和windows版

一:linux下遍历目录

void travedir(const char *dir_path,vector<string> &vfilename)    //dir_path是传入的目录  ,vcfilename存储扫描到的文件
{
  struct dirent *pdirent;
  char file_path[1024]={0};
  struct stat st;
  DIR *d_info=opendir(dir_path);
  if(d_info)
  {
    while((pdirent=readdir(d_info)))
    {
      if( (strcmp(pdirent->d_name,".")!=0)&&(strcmp(pdirent->d_name,"..")!=0))   //linux系统的"."和".."这类型的文件忽略
      {
        memset(file_path,0x0,sizeof(file_path));
        strcpy(file_path,dir_path);
        strcat(file_path,"/");
        strcat(file_path,pdirent->d_name);
        stat(file_path,&st);
        if(S_ISREG(st.st_mode))                                 //判断是普通文件
        {
          vfilename.push_back(pdirent->d_name);
        }
        else if(S_ISDIR(st.st_mode))    //是目录的情况
        {
          travedir(file_path,vfilename);
        }
      }
    }
  }
  closedir(d_info);
}

 

二:windows下的遍历目录

void   travedir(const  *char  *foldername,vector<string>  &vfilename)

{  

  CFileFind  tempFile;

  char  sTempFileFind[MAX_PATH+1]={0};

  sprintf(sTempFileFind,"%s/*.*",foldername);

  BOOL IsFind = tempFile.FindFile(sTempFileFind);

  while(IsFind)

  {

    IsFind=tempFile.FindNextFile();

    if( !tempFile.IsDots())   //无点,是目录

    {

      char   sFileFind[MAX_PATH+1];

      strcpy(sFileFind,tempFile.GetFileName());

      if(tempFile.IsDirectory())

      {       

        char sTempDir[MAX_PATH+1] = {0};
        sprintf(sTempDir, "%s/%s", foldername, sFileFind);
        travedir(sTempDir, vFileName);

      }

      else

      {

        char sTempFileName[MAX_PATH+1] = {0}; 

        sprintf(sTempFileName, "%s/%s", foldername, sFileFind); 

        vfilename.push_back(sTempFileName);

      }

    }

  }

  tempFile.Close();

}

posted @ 2022-02-18 15:40  田大叔  阅读(254)  评论(0编辑  收藏  举报