C++ 遍历目录下文件(3)

//首先查找dir中符合要求的文件
 long hFile;
 _finddata_t fileinfo;
 if ((hFile=_findfirst(filespec,&fileinfo)) != -1)
 {
  do
  {
   //检查是不是目录
   //如果不是,则进行处理
   if (!(fileinfo.attrib & _A_SUBDIR))
   {
    char filename[_MAX_PATH];
    strcpy(filename,dir);
    strcat(filename,fileinfo.name);
    cout << filename << endl;
    if (!ProcessFile(filename))
     return false;
   }
  } while (_findnext(hFile,&fileinfo) == 0);
  _findclose(hFile);
 }
 //查找dir中的子目录
 //因为在处理dir中的文件时,派生类的ProcessFile有可能改变了
 //当前目录,因此还要重新设置当前目录为dir。
 //执行过_findfirst后,可能系统记录下了相关信息,因此改变目录
 //对_findnext没有影响。
 _chdir(dir);
 if ((hFile=_findfirst("*.*",&fileinfo)) != -1)
 {
  do
  {
   //检查是不是目录
   //如果是,再检查是不是 . 或 ..
   //如果不是,进行迭代
   if ((fileinfo.attrib & _A_SUBDIR))
   {
    if (strcmp(fileinfo.name,".") != 0 && strcmp
     (fileinfo.name,"..") != 0)
    {
     char subdir[_MAX_PATH];
     strcpy(subdir,dir);
     strcat(subdir,fileinfo.name);
     strcat(subdir,"\\");
     ProcessDir(subdir,dir);
     if (!BrowseDir(subdir,filespec))
      return false;
    }
   }
  } while (_findnext(hFile,&fileinfo) == 0);
  _findclose(hFile);
 }
 return true;
}

vector<string> CBrowseDir::GetDirFilenames(const char *dir,const char *filespec)
{
 _chdir(dir);
 vector<string>filename_vector;
 filename_vector.clear();

//首先查找dir中符合要求的文件
 long hFile;
 _finddata_t fileinfo;
 if ((hFile=_findfirst(filespec,&fileinfo)) != -1)
 {
  do
  {
   //检查是不是目录
   //如果不是,则进行处理
   if (!(fileinfo.attrib & _A_SUBDIR))
   {
    char filename[_MAX_PATH];
    strcpy(filename,dir);
    strcat(filename,fileinfo.name);
    filename_vector.push_back(filename);
   }
  } while (_findnext(hFile,&fileinfo) == 0);
  _findclose(hFile);
 }
 //查找dir中的子目录
 //因为在处理dir中的文件时,派生类的ProcessFile有可能改变了
 //当前目录,因此还要重新设置当前目录为dir。
 //执行过_findfirst后,可能系统记录下了相关信息,因此改变目录
 //对_findnext没有影响。
 _chdir(dir);
 if ((hFile=_findfirst("*.*",&fileinfo)) != -1)
 {
  do
  {
   //检查是不是目录
   //如果是,再检查是不是 . 或 ..
   //如果不是,进行迭代
   if ((fileinfo.attrib & _A_SUBDIR))
   {
    if (strcmp(fileinfo.name,".") != 0 && strcmp
     (fileinfo.name,"..") != 0)
    {
     char subdir[_MAX_PATH];
     strcpy(subdir,dir);
     strcat(subdir,fileinfo.name);
     strcat(subdir,"\\");
     ProcessDir(subdir,dir);
     vector<string>tmp= GetDirFilenames(subdir,filespec);
     for (vector<string>::iterator it=tmp.begin();it<tmp.end();it++)
     {
      filename_vector.push_back(*it);
     }
    }
   }
  } while (_findnext(hFile,&fileinfo) == 0);
  _findclose(hFile);
 }
 return filename_vector;
}

bool CBrowseDir::ProcessFile(const char *filename)
{
 return true;
}

void CBrowseDir::ProcessDir(const char
 *currentdir,const char *parentdir)
{
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/49cd7e4ebeb471bf8f6b8306e4c6d072.html