C++ 遍历目录

C++ 遍历目录

原文地址:https://blog.csdn.net/love_point/article/details/109209154

#include <iostream>
#include <string>
#include <vector>
#include <string.h> 
//注意这个头文件
#include <io.h>
using namespace std;

//核心函数
void getFileNames(string path, vector<string>& files);

int main(){
    vector<string> fileNames;
    string path("D:/python/python_data/jijian/anime");  //自己选择目录测试
    getFileNames(path, fileNames);
    for (const auto &ph : fileNames) {
        std::cout << ph << "\n";
    }
    return 0;
} 
//核心代码
void getFileNames(string path, vector<string>& files)
{
    //文件句柄
    //注意:我发现有些文章代码此处是long类型,实测运行中会报错访问异常
    intptr_t hFile = 0;
    //文件信息
    struct _finddata_t fileinfo;
    string p;
    if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
    {
        do
        {
            //如果是目录,递归查找
            //如果不是,把文件绝对路径存入vector中
            if ((fileinfo.attrib & _A_SUBDIR))
            {
                if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
                    getFileNames(p.assign(path).append("\\").append(fileinfo.name), files);
            }
            else
            {
                files.push_back(p.assign(path).append("\\").append(fileinfo.name));
            }
        } while (_findnext(hFile, &fileinfo) == 0);
        close(hFile);
    }
}

获取文件夹下的指定类型的文件

#include <iostream>
#include <string>
#include <vector>
#include <string.h> 
//注意这个头文件
#include <io.h>
using namespace std;

//核心函数
void getFileNames(string path, vector<string>& files);

int main(){
    vector<string> fileNames;
    string path("D:/python/python_data/jijian/");   //自己选择目录测试
    getFileNames(path, fileNames);
//  for (const auto &ph : fileNames) {
//      std::cout << ph << "\n";
//  }
    return 0;
} 
//核心代码
void getFileNames(string path, vector<string>& files)
{
    //文件句柄
    //注意:我发现有些文章代码此处是long类型,实测运行中会报错访问异常
    intptr_t hFile = 0;
    //文件信息
    struct _finddata_t fileinfo;
    string p;
    if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
    {
        do
        {
            //如果是目录,递归查找
            //如果不是,把文件绝对路径存入vector中
            if ((fileinfo.attrib & _A_SUBDIR))
            {
                if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
                    getFileNames(p.assign(path).append("\\").append(fileinfo.name), files);
            }
            else
            {
                string name = fileinfo.name;
                //找到最后一个.的位置 
                int last_dot=name.size()-1;
                while(last_dot>-1)
                {
                    if(name[last_dot]=='.')
                    {
                        break;
                    }
                    last_dot--;
                }
                //获取后缀类型 
                string type="";
                for(int i=last_dot+1;i!=name.size();i++)
                {
                    //大写转小写 
                    if(name[i]>='A'&&name[i]<='Z')
                    {
                        name[i]+=32;
                    }
                    type+=name[i];
                }
                //过滤出来jpg和png 
                if(type=="jpg"||type=="png")
                {
                    files.push_back(p.assign(path).append("\\").append(fileinfo.name)); 
                }
            }
        } while (_findnext(hFile, &fileinfo) == 0);
        close(hFile);
    }
}

文章目录