当前位置:编程学习 > C/C++ >>

MFC递归搜索文件函数代码

自己写了一个MFC下的搜索文件的函数,递归遍历各级子目录搜索,对大小写不敏感。递归是个好东西啊,用递归写出来的东西往往代码简短,但不容易理解,并且容易出错,要多加注意。此函数毕竟只是个代码不足30行的小东西。目前存在缺点:不支持通配符*?等。后续将改进。
 
调用示例:
CStringArray aStrFile;
 int i = CFindFile(_T("D:\\"),_T("qq.txt"),&aStrFile);
 
函数代码:
[cpp]  
//第一个参数为要搜索的路径,比如"c:\\dir\\"或"c:\\dir"则在包括此目录的所有子目录下搜索  
//第二个参数为要搜索的文件,比如"qq.txt",需要提供文件后缀,大小写不敏感  
//第三个参数用于保存搜索到的文件的全路径,请构造一个CStringArray对象并传入地址  
INT CFindFile(const TCHAR *szPath,const TCHAR *szFileName,CStringArray *paStrResult)  
{  
    ASSERT(paStrResult!=NULL);  
    CString StrPath(szPath);  
    CString StrFileName(szFileName);  
    //检查路径字符串的最后一个字符是不是'\',不是则加上  
    if (StrPath[StrPath.GetLength()-1]!=_T('\\'))  
        StrPath += _T('\\');  
    CString StrFindPath = StrPath + _T("*.*");  
    //开始查找  
    CFileFind finder;  
    BOOL bWorking = finder.FindFile(StrFindPath);  
    while(bWorking)  
    {  
        bWorking = finder.FindNextFile();  
        //如果找到的是文件夹,递归进去  
        if (finder.IsDirectory()&&!finder.IsDots())  
        {  
            CFindFile(StrPath+finder.GetFileName(),StrFileName,paStrResult);  
        }  
        //如果找到了文件,将绝对路径添加进字符串数组,大小写不敏感  
        if (finder.GetFileName().CompareNoCase(StrFileName)==0)  
        {  
            paStrResult->Add(finder.GetFilePath());  
        }  
    }  
    //返回找到的文件个数  
    INT nFile = paStrResult->GetSize();  
    return nFile;  
}  
 
 
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,