QT-用QDir非递归遍历子文件夹及其文件

QT-用QDir非递归遍历子文件夹及其文件,第1张

大多数的教程里采用递归遍历的方式,而这种方式对内存的开销很大,效率低,本篇文章用栈的知识来实现非递归遍历

源码:

QDir d("D:/viczsx/document/课程")        //此处修改遍历文件夹地址

d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::AllDirs)//列出文件,列出隐藏文件(在Unix下就是以.开始的为文件),不列出符号链接(不支持符号连接的操作系统会忽略)

d.setSorting(QDir::Size | QDir::Reversed)//按文件大小排序,相反的排序顺序

QFileInfoList list = d.entryInfoList()//返回这个目录中所有目录和文件的QFileInfo对象的列表

while(!list.isEmpty()){

    QFileInfo tem= list.last()

    if(!tem.isDir()){

        qDebug()<<  tem.fileName()

        list.removeLast()

    }else if(tem.fileName() != "." &&tem.fileName() != ".."){

        qDebug()<<tem.filePath()

        QDir a(tem.filePath())

        list.removeLast()          //移除链表最后一项方便退回

        list.append(a.entryInfoList())

    }else{

        list.removeLast()

    }

}

第一篇博客

// 用文件流来读取

QFile file("my.txt")

file.open(QIODevice::ReadOnly)

QTextStram out(&file)

while (!out.atEnd()) {

    // 每次读取一行,然后判断即可

    QString strReadLine = out.readLine()

}

QDirIterator it("/etc", QDirIterator::Subdirectories)

while (it.hasNext()) {

qDebug() <<it.next()

// /etc/.// /etc/..// /etc/X11// /etc/X11/fs// ...

}

迭代器不用自己写 还有只是重命名文件名不用打开文件的 我没具体写 你先试试吧


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/714026.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-07
下一篇2023-08-07

发表评论

登录后才能评论

评论列表(0条)

    保存