SmartStone's Technical Blog

天下没有免费的午餐,即使有,那也是有毒的!
posts - 150, comments - 96, trackbacks - 2, articles - 1

 

#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;
 }