现在的位置: 首页 > 综合 > 正文

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

2013年01月06日 ⁄ 综合 ⁄ 共 1503字 ⁄ 字号 评论关闭

 

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

抱歉!评论已关闭.