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

本文介绍了一个使用C++实现的递归遍历指定路径下所有文件的方法。通过Win32 API函数FindFirstFile和FindNextFile结合使用,可以获取目录中的所有文件及子目录,并继续深入查找子目录中的文件。此外,还利用了MFC框架中的CList和CString类来存储文件路径。

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

本文转载自:http://www.cnblogs.com/smartstone/archive/2008/09/17/1292259.html
经验证可行。

#include  <afxtempl.h> 
#include  <direct.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、付费专栏及课程。

余额充值