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

本文介绍了一个使用C++编写的递归函数,该函数能够遍历指定路径下的所有文件和子文件夹,并将文件名收集到一个字符串列表中。通过实例展示了如何调用此函数并打印出所有文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#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;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值