1.获取文件夹下所有指定格式的文件(包含子文件夹):
void getFiles(std::string path, std::vector<std::string> &files, std::string format) {
//文件句柄
long long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
std::string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) {
//判断目录是否有.或者..
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(p.assign(path).append("\\").append(fileinfo.name), files, format);
} else {
std::string file = fileinfo.name;
if(file.find(format) != std::string::npos){
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
2.QT获取最低子文件夹:
//设置过滤参数,QDir::NoDotAndDotDot表示不会去遍历上层目录
QStringList get_files;
QDirIterator dir_iterator(dir_, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
//当前目录没有子文件夹
if(!dir_iterator.hasNext())
{
get_files.append(dir_);
}
else
{
while(dir_iterator.hasNext())
{
dir_iterator.next();
QFileInfo file_info = dir_iterator.fileInfo();
QString files = file_info.absoluteFilePath();
QDir dir(files);
dir.setFilter(QDir::Dirs |QDir::NoDotAndDotDot );
if(dir.count() <= 0)
get_files.append(files);
}
}
3.QT获取指定格式的所有文件(包含子文件夹):
QStringList get_files_;
QDirIterator dir_iterator(dir_, QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
while(dir_iterator.hasNext())
{
dir_iterator.next();
QFileInfo file_info = dir_iterator.fileInfo();
QString files = file_info.absoluteFilePath();
get_files_.append(files);
}
//格式过滤
QStringList get_files_jpg = get_files_.filter(".jpg");
QStringList get_files_png = get_files_.filter(".png");
get_files_ = get_files_jpg + get_files_png;