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



前言:

  最近用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使用方法 ]



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值