一、条件与目的
给一个正确的文件夹绝对路径,QString字符串形式。要求打印出其中所有子目录以及其下的全部文件路径。
二、废多看崩
/*
* 名称:遍历显示函数
* 参量:path-绝对路径
* 方法类:QDir-路径类 QFileInfoList-文件基本信息类
* 关键方法:递归,遍历
* 日期:20220804
* 作者:Even
*/
void MainWindow::ShowFile(const QString path)
{
//对传入的绝对路径进行QString-QDir转化
QDir Qdir=path;
//建立QFileInfoList表,内容填充为路径下的子文件
/*QDir:
* Files:显示所有文件
* NoDotAndDotDot:排除./和../这种上层目录,防止循环不断读取自身
* Dirs:显示目录
*/
QFileInfoList Qflist=Qdir.entryInfoList(QDir::Files|QDir::NoDotAndDotDot|QDir::Dirs);
//遍历操作 var-元素/对象/成员 Qflist-列表/数组/集合
/*
* auto:自动匹配类型,方式是从后面的列表等组中获取其中成员的类型
*/
foreach(auto var,Qflist)
{
//如果抓到了一个路径
if(var.isDir()){
//将子路径视作一个父路径进行递归,以实现深入子目录遍历全部文件的目的
ShowFile(var.absoluteFilePath());
}
//如果抓到了一个文件
else if(var.isFile()){
//打印其文件绝对路径
qDebug()<<__FILE__<<__FUNCTION__<<__LINE__<<" "<<var.absoluteFilePath();
}
//如果抓到了一个偷跑的可莉/做饭的雷神/打怪兽的奥特曼
else{
//啥也不是
qDebug()<<"啥也不是.";
}
}
//跑路
return ;
}
三、效果
截图中已将__FILE__文件路径隐藏。
四、解释
除去代码中的注释以外,在此重申并列出重点
4.1遍历用foreach
这就相当于c语言里一个xx类型的数组,其中每个元素都是xx类型的,foreach就是从数组中将每个元素直接拿来用,并不暴露出索引index,适合不用监视索引index的情况使用。
auto真是个好东西,可以自动赋予变量类型。
4.2路径类QDir
在本例中用于生成带路径的表list,其中的使能标志flag的需注意,如不使能使用默认标志,则会陷入不断检测自身的bug中,这是由于传入参数本身已是一个路径,在遍历中会通过校验从而继续遍历自身,并不会进入子目录。
4.3文件信息类QFileInfoList
使用此类进行路径/文件校验,并且提供绝对路径以供使用。在使用foreach的时候,并不需要判断表的尾部(count方法),以及移动取表内容(at方法)。
4.4筛查方法
筛选路径可以在抓可莉前后添加,部分文件类型需要忽略的就continue跳过或者不加入append到新表中(加入新表是为了返回return时吐给上层使用),由于是递归且本函数是显示全部内容,所以这里仅提供筛查方法。
五、结论
Qt有太多已经搞好了的库,只要学会拿来用就是了。