QT实现遍历文件夹图片文件

一、功能介绍:

在为程序所在文件系统实现U盘自动挂载之后,将U盘自动挂载在开发板上文件系统中的/mnt/usb目录,故还需为程序添加遍历/mnt/usb路径下的文件夹内图片文件,暂定为扫描指定目录下一层文件夹内的图片文件。

二、参考资料:

以下一段代码为使用QT实现遍历文件夹和文件目录(递归法)

bool FindFile(const QString & path) { QDir dir(path); if (!dir.exists()) return false; dir.setFilter(QDir::Dirs|QDir::Files); dir.setSorting(QDir::DirsFirst); QFileInfoList list = dir.entryInfoList(); int i=0; do{ QFileInfo fileInfo = list.at(i); if(fileInfo.fileName()=="."|fileInfo.fileName()=="..") { i++; continue; } bool bisDir=fileInfo.isDir(); if(bisDir) { nFiles++; std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10) .arg(fileInfo.fileName(),10).arg(fileInfo.path()))<<endl; FindFile(fileInfo.filePath()); } else{ nFiles++; std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10) .arg(fileInfo.fileName(),10).arg(fileInfo.path()))<<endl; } i++; }while(i<list.size()); return true; }

三、实现过程

1.主要使用以下qt

Qdir——QDir则可以指定目录,以取得所指定目录或其中的项目信息(档案、目录等),可以设定名称过滤、属性过滤(像是只读、档案或是目录等等)与排序,过滤与排序可以使用setNameFilter()、setFilter()与setSorting()方法来设定,可以使用entryList()来取得一个目录下的所有档案与子目录字符串名称,或是使用entryInfoList()传回QFileInfoList,当中包括目录中所有项目的QFileInfo指针

QfileInfo——QFileInfo就是用来取得指定的档案之相关讯息,像是相对或绝对路径信息、隐藏属性、大小、最后更新等,为了加快存取档案的信息,QFileInfo会快取信息,如果档案在快取信息之后,被使用者作了修正,则可以使用refresh()更新QFileInfo的信息。QFileInfo可以是符号链接(SymbolLink)、目录或档案,由isFile()、isDir()与isSymLink()来作判断。

2.实现代码:


bool RenderArea::init() { dirNum=0; //指定当前目录在指定目录下一层子目录的序号 dirEndNum=0; //指定指定目录下一层子目录的数量 bool reTurn=false; i_dirpic=0; //图片序号 dir=tr("/mnt/usb"); dirlist<<dir; QDir picdir0(dir); //判断文件夹是否为空 if (!picdir0.exists()) { qDebug("x1"); dirNum=-1; return reTurn; } picdir0.setFilter(QDir::Dirs|QDir::NoDotAndDotDot); QFileInfoList list0 = picdir0.entryInfoList(); //判断文件夹内文件夹数量是否为0 if(list0.size()<1) { qDebug("x3"); return reTurn; } dirEndNum=list0.size(); //获取指定路径下一层文件夹路径列表 for(int ii=0;ii<list0.size();ii++) { QFileInfo fileInfo0 = list0.at(ii); QString path=fileInfo0.filePath(); dirlist<<path; } //递归遍历文件夹内图片文件 dirNum=picList(dirlist.at(dirNum)); if(dirNum!=-1) { reTurn=true; emit getDir(dirlist.at(dirNum), i_dirpic); } qDebug("dirNum=%d",dirNum); return reTurn; } //显示指定路径下第一张照片(遍历一层子目录) int RenderArea::picList(QString nPicdir) { QDir picdir(nPicdir); QStringList filters; filters << "*.bmp" << "*.jpg" << "*.png"<<"*.gif"; picdir.setNameFilters(filters); QFileInfoList list = picdir.entryInfoList(); if(list.size()<1 && dirNum<dirEndNum) { qDebug("return"); dirNum++; if(dirNum==(dirEndNum+1)) { dirNum=-1; return dirNum; } picList(dirlist.at(dirNum)); return dirNum; } QFileInfo fileInfo = list.at(i_dirpic); QString path=fileInfo.filePath(); return dirNum; //返回文件目录序号 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值