VC取目录(包括子目录)下所有文件名

 

#include  < afxtempl.h >

typedef CList
< CString,CString &>  StringList;

void  GetAllFiles(CString path,StringList &  filenamelist, POSITION headpos)
{
 WIN32_FIND_DATA fdata 
=  { 0 };  
 _chdir(path.GetBuffer(
0 ));
 HANDLE hSearch 
=  FindFirstFile(_T( " * " ), & fdata);
 
if (hSearch  ==  INVALID_HANDLE_VALUE)    
  
return ;
 CString FileName;

 
if (fdata.dwFileAttributes  &  FILE_ATTRIBUTE_DIRECTORY) {
  
if (fdata.cFileName[ 0 ] != ' . ' )
  { 
   CString childpath;
   childpath.Format(
" %s\\%s " ,path,fdata.cFileName);
   SetCurrentDirectory(childpath.GetBuffer(
0 ));
   GetAllFiles(childpath,filenamelist,headpos);
   SetCurrentDirectory(
" .. " );
  }
 }
 
else
 {
  FileName.Format(
" %s\\%s " ,path,fdata.cFileName);
  filenamelist.InsertAfter(headpos,FileName);
 }

 
while (FindNextFile(hSearch,  & fdata))
 {
  
if (fdata.dwFileAttributes  &  FILE_ATTRIBUTE_DIRECTORY)  {
   
if (fdata.cFileName[ 0 ] != ' . ' )
   {
    
    CString childpath;
    childpath.Format(
" %s\\%s " ,path,fdata.cFileName);
    SetCurrentDirectory(childpath.GetBuffer(
0 ));
    GetAllFiles(childpath,filenamelist,headpos);
    SetCurrentDirectory(
" .. " );
   }
  }
  
else
  {
   FileName.Format(
" %s\\%s " ,path,fdata.cFileName);
   filenamelist.InsertAfter(headpos,FileName);
  }
 }

 FindClose(hSearch);
}


//  调用

 StringList FileNameList;
 CString Head 
=   " . " ;
 POSITION pos 
=  FileNameList.AddHead(Head);
 GetAllFiles(Path,FileNameList,pos);
 
int  nCount  =  FileNameList.GetCount();
 
for  ( int  i = 1 ;i < nCount;i ++ )
 {
  POSITION pos 
=  FileNameList.FindIndex(i);
  CString FileName 
=  FileNameList.GetAt(pos);
  cout 
<<  FileName.GetBuffer( 0 <<  endl;
 }

你可能感兴趣的:(VC取目录(包括子目录)下所有文件名)