【Qt】显示文件/文件夹下所有文件的路径

一、条件与目的

给一个正确的文件夹绝对路径,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有太多已经搞好了的库,只要学会拿来用就是了。

猜你喜欢

转载自blog.csdn.net/qq_34217861/article/details/126161367