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);
}
}