Qt遍历所有子文件夹

struct path{    // 
    QFileInfoList dirInfos; // 文件夹
    QFileInfoList fileInfos;    // 文件
    path(const QFileInfoList &dirInfos, const QFileInfoList &fileInfos) {   // 构造函数
        this->dirInfos = dirInfos;
        this->fileInfos = fileInfos;
    }
};

void getChildPath(const QFileInfoList &dirInfos, QList<path> &paths) {  // 递归遍历子文件夹
    if (dirInfos.isEmpty()) {   // 
        return;
    }
    QDir dir;
    for (const auto &dirInfo : dirInfos) {
        dir = dirInfo.absoluteFilePath();
        QFileInfoList childFileInfos = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);    // 子文件
        QFileInfoList childDirInfos = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); // 子文件夹
        paths.append(path(childDirInfos, childFileInfos));  // 记录
        if (!childDirInfos.isEmpty()) { // 有文件夹再遍历
            getChildPath(childDirInfos, paths); // 递归
        }
    }   
}

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

    QList<path> paths;
    paths.append(path(QFileInfoList({ QFileInfo("D:\\test") }), QFileInfoList({})));
    getChildPath(paths.constFirst().dirInfos, paths);   // 遍历

    return 0;
}

本文作者:vanxkr

本文链接:http://www.vanxkr.com/2020/1/Qt-dir-ergodic

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0许可协议。转载请注明出处!

Qt QVariantMap与QJsonObject互转
0 条评论
已登录,注销 取消