#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <dirent.h>
#include <string>
using namespace std;
//从指定路径获取文件路径;不指定后缀suffixs则获取所有文件路径
int getFiles(const string& path, vector<string> &files, vector<string> suffixs = {})
{
int FileCnt = 0;
DIR *dirp;
struct dirent *dp;
dirp = opendir(path.c_str());
if (dirp == NULL) {
printf("opendir %s failed\n",path.c_str());
return 0;
}
while ((dp = readdir(dirp)) != NULL) {
string curpath(path);
if (path.back() != '/') {
curpath += string("/") += dp->d_name;
} else {
curpath += dp->d_name;
}
//如果是目录,递归查找
if(dp->d_type == DT_DIR) {
if(0 != strcmp(dp->d_name,".") && 0 != strcmp(dp->d_name,"..")){
FileCnt += getFiles(curpath, files, suffixs);
}
}
//判断是否为文件以及文件后缀名
else if (dp->d_type == DT_REG) {
if (suffixs.size() <=0 ) {
files.push_back(curpath);
FileCnt++;
} else {
for (auto suffix : suffixs) {
if (string(strrchr(dp->d_name,'.')) == suffix) {
files.push_back(curpath);
FileCnt++;
break;
}
}
}
}
}
closedir(dirp);
return FileCnt;
}
//从指定路径获取文件路径(有序)
int getFilesOrdered(const string& path, vector<string> &files, vector<string> suffixs = {}){
int FileCnt = 0;
FileCnt = getFiles(path, files, suffixs);
sort(files.begin(), files.end());
return FileCnt;
}
Linux获取指定目录以及其子目录下所有文件名 C++(可根据后缀查找)
最新推荐文章于 2021-05-07 19:08:22 发布