c++按顺序读取目录内文件

2019-05-06  本文已影响0人  this_is_for_u

背景

按顺序读取目录内文件

之前使用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;
}

上一篇 下一篇

猜你喜欢

热点阅读