Qt - как использовать QDir :: entryList () для фильтрации обоих файлов с определенными типами файлов и каталогов одновременно - PullRequest
2 голосов
/ 09 мая 2019

Возможно ли получить имена файлов с определенными типами файлов и именами каталогов одновременно, используя QDir::entryList()?

В моем коде был флаг QDir::Dirs. Но так как я добавил << "*.mp4", он игнорировал папки.

void Hierarchy::setItems(const QString& path, int level)
{
    QDir source(path);
    if (!source.exists())
        return;

    QStringList folders = source.entryList(QStringList() << "*.mp4", 
            QDir::Files | QDir::NoDot | QDir::NoDotDot | QDir::Dirs);

    for (int i = 0; i < folders.size(); ++i) {
        qDebug() << "Level " << i << " " << folders[i];
        setItems(path + "/" + folders[i] + "/", level++);
    }

}

1 Ответ

0 голосов
/ 09 мая 2019

Вы можете создать два списка: один для папок и другой для файлов:

void setItems(QString const& path, int level)
{
    QDir const source(path);
    if (!source.exists())
        return;

    QStringList const files = source.entryList(QStringList() << "*.mp4", QDir::Files);
    QStringList const folders = source.entryList(QDir::NoDot | QDir::NoDotDot | QDir::Dirs);

    QStringList const all = folders + files;

    for (QString const& name: all)
    {
        QString const fullPathName = path + QDir::separator() + name;
        if (QFileInfo(fullPathName).isDir())
        {
            setItems(fullPathName, level++);
            continue;
        }
        qDebug() << "Level " << level << " " << fullPathName;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...