深度优先——遍历Linux文件系统

本文介绍了一个使用QT的程序来遍历指定目录及其子目录下的所有文件和文件夹的方法,并展示了如何通过递归方式获取文件信息及路径。此外,还提到了QT提供的QFileSystemModel作为更简便的文件系统访问方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



前言:

  最近用qt做usb驱动相关任务,需要一个能访问文件系统的程序,它要遍历给定目录下的所有内容,并按结构安排显示出目录与文件。


QFileInfoList getDir(QString path)
{
    QDir dir(path);
    QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);//文件夹和文件
    QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);   //只有文件夹


    if((folder_list.size()==0)&&(file_list.size()!=0)){//目录下不存在文件夹,只存在文件的情况:不递归,只显示;
        for(int j=0;j!=file_list.size();j++){
           QFileInfo fileInfo = file_list.at(j);
           std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10).arg(fileInfo.fileName()).arg(fileInfo.absoluteFilePath()) );
           std::cout << std::endl;
        }
        std::cout <<"***************************"<< std::endl;
    }


    for(int i = 0; i != folder_list.size(); i++)//对目录进行递归
    {
        if(i==0){ //在第一次进入目录时,显示目录下的 文件 与 文件夹
            for(int j=0;j!=file_list.size();j++){
               QFileInfo fileInfo = file_list.at(j);
               std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10).arg(fileInfo.fileName()).arg(fileInfo.absoluteFilePath()) );
               std::cout << std::endl;
            }

            for(int k=0;k!=folder_list.size();k++){
                QFileInfo fileInfo111 = folder_list.at(k);
                std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo111.size(), 10).arg(fileInfo111.fileName()).arg(fileInfo111.absoluteFilePath()) );
                std::cout << std::endl;
            }
            std::cout <<"***************************"<< std::endl;
         }

         //显示后再开始递归该目录
         QString name = folder_list.at(i).absoluteFilePath();
         QFileInfoList child_file_list = getDir(name);
         file_list.append(child_file_list);

    }

    return file_list;
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString path="指定目录";
    getDir(path);

    return a.exec();
}


后续:

  QT提供了QFileSystemModel 方法,一般情况下不需要自己去遍历文件系统做显示,直接调用该方法即可;
  [ QFileSystemModel使用方法 ]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值