linux dirent.h 实现getFiles
void getFiles(std::string root_dir, std::string ext, std::vector<std::string>& files) {
DIR *dir;
struct dirent *ptr;
if ((dir = opendir(root_dir.c_str())) == NULL) {
gLogInfo << "Open dir error..." << std::endl;
return;
}
while ((ptr = readdir(dir)) != NULL) {
if (strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0) {
continue;
} else if(ptr->d_type == 8) {// file
char* dot = strchr(ptr->d_name, '.');
if (dot && !strcasecmp(dot, ext.c_str())) {
std::string filename(root_dir);
filename.append("/").append(ptr->d_name);
files.push_back(filename);
}
} else if(ptr->d_type == 10) { // link file
continue;
} else if(ptr->d_type == 4) {// dir
std::string dir_path(root_dir);
dir_path.append("/").append(ptr->d_name);
getFiles(dir_path.c_str(), ext, files);
}
}
closedir(dir);
}
std::vector<std::string> filenames;
filenames.reserve(20480);
for (size_t i = 0; i < onnx_args.dataDirs.size(); i++) {
getFiles(onnx_args.dataDirs[i], ".jpg", filenames);
}