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

本文转载自: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、付费专栏及课程。

余额充值