一个 Qt之遍历文件夹源码解释

时间:2020-12-15 11:25:08
代码来源:http://blog.csdn.net/liang19890820/article/details/9955201

void ImageTree::addFolderImages(QString path)
{
    //判断路径是否存在
    QDir dir(path);
    if(!dir.exists())
    {
        return;
    }
    dir.setFilter(QDir::Files | QDir::NoSymLinks);
    QFileInfoList list = dir.entryInfoList();

    int file_count = list.count();
    if(file_count <= 0)
    {
        return;
    }

    QStringList string_list;
    for(int i=0; i<file_count; i++)
    {
        QFileInfo file_info = list.at(i);
        QString suffix = file_info.suffix();
        if(QString::compare(suffix, QString("png"), Qt::CaseInsensitive) == 0)   
        {   
            QString absolute_file_path = file_info.absoluteFilePath();
            string_list.append(absolute_file_path);
        }
    }
}
     分析:遍历文件的下一层,对于系统而言包括:文件夹、文件、快捷方式,使用setFilter即可过滤。通过entryInfoList则可以获取过滤后所得到的文件夹下的文件信息列表,遍历文件通过操作QFileInfo可得到所需的文件详细信息(大小、类型、后缀等)。

setFilter()设置搜索条件,QDir::Files - 只列出文件,QDir::NoSymLinks - 不列出符号连接(不支持符号连接的操作系统会忽略它)。

参考:
  • QDir::Dirs - 只列出目录。
  • QDir::Files - 只列出文件。
  • QDir::Drives - 列出磁盘驱动器(在Unix下被忽略)。
  • QDir::NoSymLinks - 不列出符号连接(不支持符号连接的操作系统会忽略它)。
  • QDir::All - 列出目录、文件、驱动器和符号连接(除非你指定系统,这不会列出损坏的符号连接)。
  • QDir::TypeMask - Dirs、Files、Drives和NoSymLink的掩码。
  • QDir::Readable - 列出应用程序可以读访问的文件。
  • QDir::Writable - 列出应用程序可以写访问的文件。
  • QDir::Executable - 列出应用程序可以执行访问的文件。可执行需要由Dirs和Files组合。
  • QDir::RWEMask - Readable、Writable和Executable标记的掩码。
  • QDir::Modified - 只列出已经被修改的文件(在Unix下被忽略)。
  • QDir::Hidden - 列出隐藏文件(在Unix下就是以.开始的文件)。
  • QDir::System - 列出系统文件(在Unix下就是FIFO、套接字和设备文件)。
  • QDir::AccessMask - Readable、Writable、Executable、Modified、Hidden和System标记的掩码。
  • QDir::DefaultFilter - 内部标记
QFileInfoList:文件信息列表。

const QFileInfoList * QDir::entryInfoList ( const QString & nameFilter, int filterSpec = DefaultFilter, int sortSpec = DefaultSort ) const [虚]

返回这个目录中所有目录和文件的 QFileInfo 对象的列表,根据 setSorting ()排序并且根据 setFilter ()和 setNameFilter ()进行过滤。

过滤器和排序的规定可以使用nameFilterfilterSpecsortSpec参数来指定。

如果这个目录是不可读的或者不存在,返回0。

返回的指针是一个指向QFileInfoList的常量指针。这个列表归QDir对象所有并且将会在同一个QDir实例下次调用entryInfoList()时被重新使用。如果你想在调用这个函数之后保留这个列表的条目,你将需要复制它们。

也可以参考entryList()、setNameFilter()、setSorting()和setFilter()。

实例:dirview/dirview.cppfileiconview/qfileiconview.cpp

const QFileInfoList * QDir::entryInfoList ( int filterSpec = DefaultFilter, int sortSpec = DefaultSort ) const [虚]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

返回这个目录中所有目录和文件的QFileInfo对象的列表,根据setSorting()排序并且根据setFilter()和setNameFilter()进行过滤。

过滤器和排序的规定可以使用filterSpecsortSpec参数来指定。

如果这个目录是不可读的或者不存在,返回0。

返回的指针是一个指向QFileInfoList的常量指针。这个列表归QDir对象所有并且将会在同一个QDir实例下次调用entryInfoList()时被重新使用。如果你想在调用这个函数之后保留这个列表的条目,你将需要复制它们。

也可以参考entryList()、setNameFilter()、setSorting()和setFilter()。