天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 34|回复: 0

mfc文件查找 vector<pair<CString,CString>>

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
/************************************************************************
说明:
    在文件夹中查找文件(仅在指定文件夹查找,不递归)
参数:
    fileName:要查找的文件名。支持通配符*
    directory:要查找的文件所在的目录路径
返回值:
    pair<string,string>类型的数组,map<文件名,文件路径>
************************************************************************/
vector<pair<CString,CString>> FileHelper::FindFilesInDirecotry(CString fileName,CString directory )
{
    vector<pair<CString,CString>> files;

    if(directory.Right(1) != "\\") //保证目录是以\结尾的
    {  
        directory += "\\";
    }
    directory += fileName;
    CFileFind finder;
    BOOL success = finder.FindFile(directory);
    while(success)
    {
        success = finder.FindNextFile();
        CString name = finder.GetFileName();
        CString path = finder.GetFilePath();
        pair<CString,CString> fileMap(name,path);
        files.push_back(fileMap);
    }
    finder.Close();
    return files;
}


/************************************************************************
说明:
    在文件夹中递归查找文件
参数:
    fileName:要查找的文件名。支持通配符*
    directory:要查找的文件所在的目录路径
    recursionCount:递归查找的深度,默认为-1(不限制深度),0表示只搜索给定的directory目录
返回值:
    pair<string,string>类型的数组,map<文件名,文件路径>
************************************************************************/
vector<pair<CString,CString>> FileHelper::FindFilesInDirecotryRecursion( CString fileName,CString directory,int recursionCount)
{
    vector<pair<CString,CString>> files;

    int curRecursionCount = recursionCount;

    //先对参数传进来的文件夹查找
    vector<pair<CString,CString>> localFiles =  FindFilesInDirecotry(fileName,directory);
    files.insert(files.end(),localFiles.begin(),localFiles.end());

    //然后对此文件夹下面的子文件夹递归查找
    CFileFind finder;
    if(directory.Right(1) != "\\") //保证目录是以\结尾的
    {  
        directory += "\\";
    }
    directory += "*.*";

    BOOL res = finder.FindFile(directory);
    while (res)
    {
        res = finder.FindNextFile();
        CString path = finder.GetFilePath();
        CString name = finder.GetFileName();
        curRecursionCount = recursionCount;  //查找同级目录的时候将当前深度设置为给定值
        if(finder.IsDirectory() && !finder.IsDots())
        {
            if(curRecursionCount >= 1 || curRecursionCount == -1 )
            {
                if(curRecursionCount >= 1)
                {
                    curRecursionCount--;
                }
                localFiles = FindFilesInDirecotryRecursion(fileName,path,curRecursionCount); //如果目标是个文件夹,则利用嵌套来遍历
                files.insert(files.end(),localFiles.begin(),localFiles.end());
            }
        }
    }
    finder.Close();
    return files;
}

 

 

 

 

mfc文件查找 vector<pair<CString,CString>>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 12:45 , Processed in 0.151984 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表