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 区别

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

你可能感兴趣的:(QT)