背景
按顺序读取目录内文件
之前使用C语言的opendir函数读取目录内文件,发现不是按照名字排序的,看解释返回的列表貌似是根据到某个存储节点的距离来排序的,所以找到了这个函数scandir。
代码
#include <dirent.h>
int scandir(const char *name, struct dirent ***namelist,int (*filter)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **));
int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);
param 1:目录的名字
param 2:返回的目录内经过某种排序的文件列表
param 3:某种过滤规则,自定义
param 4:某种排序规则,可以自定义,也有两个给定的
注意:这里第二个参数是内部malloc内存,需要在外部free掉
附上代码:
#include <iterator>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <dirent.h>
using namespace std;
int fileNameFilter(const struct dirent *cur) {
std::string str(cur->d_name);
if (str.find(".bin") != std::string::npos) {
return 1;
}
return 0;
}
std::vector<std::string> getDirBinsSortedPath(std::string dirPath) {
struct dirent **namelist;
std::vector<std::string> ret;
int n = scandir(dirPath.c_str(), &namelist, fileNameFilter, alphasort);
if (n < 0) {
return ret;
}
for (int i = 0; i < n; ++i) {
std::string filePath(namelist[i]->d_name);
ret.push_back(filePath);
free(namelist[i]);
};
free(namelist);
return ret;
}
网友评论