#pragma once
#include <iostream>
#include <string.h>
#include <unistd.h>
#include <sys/io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "dirent.h"
#include <time.h>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
#define MICRO_IN_SECOND 1000000
#define NANOS_IN_SECOND 1000000000
// 获取文件后缀名
static string getExtension(string filename) {
return filename.substr(filename.find_last_of('.'));
}
// 判断是不是图片
static bool is_image(string filename) {
string ext = getExtension(filename);
vector<string> formats = {".jpg", ".jpeg", ".png", ".ppm", ".bmp", ".pgm", ".tif", ".tiff", ".webp"};
vector<string>::iterator it = find(formats.begin(), formats.end(), ext);
return it != formats.end();
}
// 获取文件名,不包含目录
static string getFilename(string file_fullpath) {
return file_fullpath.substr(file_fullpath.find_last_of('/') + 1);
}
//获取文件名,不包含目录和后缀名
static string getFilenameNoExt(string filename) {
filename = getFilename(filename);
return filename.substr(0, filename.find_last_of('.'));
}
static string getParentPath(string file_fullpath) {
int idx = file_fullpath.find_last_of('/');
return file_fullpath.substr(0, idx);
}
//读取某给定路径下所有文件夹与文件名称,并带完整路径
static void getAllFilesInDirs(string path, vector<string> &fileFullpath) {
DIR *pDir;
struct dirent *ptr;
if (!(pDir = opendir(path.c_str()))) return;
while ((ptr = readdir(pDir)) != 0) {
if (ptr->d_type == DT_DIR) {
if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) {
string new_path = path + "/" + ptr->d_name;
getAllFilesInDirs(new_path, fileFullpath);
}
} else {
fileFullpath.push_back(path + "/" + ptr->d_name);
}
}
closedir(pDir);
}
//读取某给定路径下后缀名为format得文件名称,并带完整路径
static void getAllFilesByformat(string path, vector<string> &fileFullpath, string format) {
DIR *pDir;
struct dirent *ptr;
string f;
if (!(pDir = opendir(path.c_str()))) return;
while ((ptr = readdir(pDir)) != 0) {
if (ptr->d_type == DT_DIR) {
if (strcmp(ptr->d_name, ".") != 0 && strcmp(ptr->d_name, "..") != 0) {
string new_path = path + "/" + ptr->d_name;
getAllFilesByformat(new_path, fileFullpath, format);
}
} else if (ptr->d_type == DT_REG && getExtension(ptr->d_name) == format) {
f.clear();
f = path + string("/") + string(ptr->d_name);
fileFullpath.push_back(f);
}
}
closedir(pDir);
}