Qt中利用QDirIterator获取目录下的所有文件

您可以使用QDirIterator一次遍历一个目录。它类似于QDir::entryList()和QDir::entryInfoList(),但因为它一次只列出一个条目,而不是一次列出所有条目,它的扩展性更好,更适合大目录。之前我们看到很多用递归的方式进行遍历的,用迭代器方法的效率

用法一:列举全部文件(不包含链接)

    QString path = "目标路径";
    QDirIterator iter(path,
                   QDir::Files | QDir::NoSymLinks,
                   QDirIterator::Subdirectories);
    while(iter.hasNext())
     {
        iter.next();
       
        qDebug() << "fileName:" << iter.fileName();  // 只有文件名
        qDebug() << "filePath:" << iter.filePath();  //包含文件名的文件的全路径

	 	QFileInfo fileInfo = iter.fileInfo();
        QString absoluteFilePath = fileInfo.absoluteFilePath(); //这个和iter.filePath()结果一样
        qDebug() << "absoluteFilePath:" << absoluteFilePath;
     }

用法二:获取某目录下的某类型文件(这里用*.jpg,*.png图片来举例说明)

 QString path = "目标路径";
 QDirIterator iter(path, QStringList() << "*.jpg" << "*.png",
                   QDir::Files | QDir::NoSymLinks,
                   QDirIterator::Subdirectories);
    while(iter.hasNext())
     {
        iter.next();
        qDebug() << "filePath:" << iter.filePath();  //包含文件名的文件的全路径
     }

Qt帮助文档了的该类的公有函数

QDirIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters = QDir::NoFilter, QDirIterator::IteratorFlags flags = NoIteratorFlags)

QDirIterator(const QString &path, QDir::Filters filters, QDirIterator::IteratorFlags flags = NoIteratorFlags)

QDirIterator(const QString &path, QDirIterator::IteratorFlags flags = NoIteratorFlags)

QDirIterator(const QDir &dir, QDirIterator::IteratorFlags flags = NoIteratorFlags)

~QDirIterator()

QFileInfo fileInfo() const

QString fileName() const

QString filePath() const

bool hasNext() const

QString next()

QString path() const
QString fileName() const

该函数返回的只是文件名,比如1.txt

QString filePath() const

该函数返回文件的全路径,比如D:/test/sub/1.txt

QString path() const

文档是这样说的:Returns the base directory of the iterator.

这个返回的每次都一样,就是你搜索的目录路径,在构造函数里传入的第一个参数,就是它了。

经个人测试,该方法的效率和递归的效率是一样的,可以放心地用。

参考文档:
Qt 遍历文件夹的三种方式

QDirIterator QT遍历目录文件,包括子文件(记录自己获取文件显示不完全的问题)

关于Qt4 QDirIterator遇到中文死循环的问题

QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)

QDir, QFileInfo 和 QDirIterator 区别

遍历文件夹及其子孙文件夹中的文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值