您的位置:首页 > 编程语言 > Qt开发

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

2012-05-15 17:15 274 查看
一、功能介绍:

在为程序所在文件系统实现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可以是符号链接(Symbol Link)、目录或档案,由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; //返回文件目录序号
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt list path 照片