C++/QT获取文件夹下指定格式的文件

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;

猜你喜欢

转载自blog.csdn.net/weixin_42096202/article/details/110519543