c++ 读取文件夹中文件信息

1、获取文件夹中(包括其子文件夹)特定后缀文件的绝对路径
以jpg和png为例

#include <io.h>
vector<string> getFilesList(string dir)
{
    vector<string> allPath;
    // 在目录后面加上"\\*.*"进行第一次搜索
    string dir2 = dir + "\\*.*";
    intptr_t handle;
    _finddata_t findData;
    handle = _findfirst(dir2.c_str(), &findData);
    if (handle == -1) {// 检查是否成功
        cout << "can not found the file ... " << endl;
    }
    while (_findnext(handle, &findData) == 0)
    {
        if (findData.attrib & _A_SUBDIR) //是否含有子目录
        {
            //若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索
            if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
                continue;
            // 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
            string dirNew = dir + "\\" + findData.name;
            vector<string> tempPath = getFilesList(dirNew);
            for (string x:tempPath)
            {
                if (x.substr(x.find_last_of('.') + 1) == "jpg" || "png")  //判断文件后缀是否如需求相似
                {
                    allPath.push_back(x);
                }
            }
        }
        else //不是子目录,即是文件
        {
            string dirNew = findData.name;
            string suffix_str = dirNew.substr(dirNew.find_last_of('.') + 1);
            if (suffix_str == "jpg" || "png")
            {
                allPath.push_back(dir + "\\" + findData.name);
            }
        }
    }
    _findclose(handle);    // 关闭搜索句柄   
    return allPath;
}

2、获取文件夹中子文件夹的绝对路径

vector<string> getFilesList(string dir)
{
    vector<string> allPath;
    // 在目录后面加上"\\*.*"进行第一次搜索
    string dir2 = dir + "\\*.*";
    intptr_t handle;
    _finddata_t findData;
    handle = _findfirst(dir2.c_str(), &findData);
    if (handle == -1) {// 检查是否成功
        cout << "can not found the file ... " << endl;
    }
    while (_findnext(handle, &findData) == 0)
    {
        if (findData.attrib & _A_SUBDIR) //是否含有子目录
        {
            //若该子目录为"."或"..",则进行下一次循环,否则输出子目录名,并进入下一次搜索
            if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
                continue;
            // 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
            string dirNew = dir + "\\" + findData.name; //子文件夹路径
            allPath.push_back(dirNew );
        }
        else //不是子目录,即是文件,不做处理
        {
           
        }
    }
    _findclose(handle);    // 关闭搜索句柄   
    return allPath;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值