对指定文件夹进行递归遍历,将所有文件存到QStringList里。两种方法

6 篇文章 0 订阅
看代码吧。
一、
#ifndef C4FILESTREE_H
#define C4FILESTREE_H

#include <QObject>
#include <QDir>
/**************************************************
 *这个类用来 获取指定文件夹内所有文件的路径+名字(filepath)
 * **************************************************/
class C4FilesTree : public QObject
{
    Q_OBJECT
public:
    explicit C4FilesTree(QObject *parent = 0);
    QStringList filesTree(QString path,bool brelative = true);
    void setAbsDir(QString dir) {mAbsDir = dir;}//指定相对路径.
private:
    QString mAbsDir;

};

#endif // C4FILESTREE_H


#include "c4filestree.h"
#include <QDebug>
#include <QFileInfo>
C4FilesTree::C4FilesTree(QObject *parent) :
    QObject(parent)
{
}                           
QStringList C4FilesTree::filesTree(QString path)//奇怪了,怎么求相对路径的函数没有的?以后看.
{
    QDir dir;
    QStringList filespath;
    filespath.empty();
    if(!dir.cd(path))
        return filespath;
    QFileInfoList filelist = dir.entryInfoList(QDir::Files,QDir::Size);
    foreach(QFileInfo str,filelist)
    {
        QString st= str.canonicalFilePath();
        filespath <<st;
    }
    QFileInfoList dirlist = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot,QDir::Size);
    foreach(QFileInfo dir,dirlist)
    {
        QStringList list = filesTree(dir.filePath());
        if(!list.isEmpty())
        {
            filespath<<list;
        }
    }
    return filespath;
}

二、

//遍历各级文件夹,并将这些文件夹中的文件删除
{
    QVector<QString> dirNames;
    QDir dir;
    QFileInfoList filst;
    QFileInfoList::iterator curFi;
    StringList filespath;
    for(int i=0;i<dirNames.size();++i){
        dir.setPath(dirNames[i]);
        filst=dir.entryInfoList(QDir::Dirs|QDir::Files
                                |QDir::Readable|QDir::Writable
                                |QDir::Hidden|QDir::NoDotAndDotDot
                                ,QDir::Name);
        if(filst.size()>0){
            curFi=filst.begin();
            while(curFi!=filst.end()){
                //遇到文件夹,则添加至文件夹列表dirs尾部
                if(curFi->isDir()){
                    dirNames.push_back(curFi->filePath());
                }else if(curFi->isFile()){
                    //遇到文件,则加进来
                QString st=curFi.canonicalFilePath();
                filespath <<st;
                }
                curFi++;
            }//end of while
        }
    }





 
 
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值