Я ищу функцию, похожую на функцию глобуса Python.
If my folder structure is:
folder1/abc1.txt
folder1/xyz1.txt
folder1/abc2.txt
folder2/abc3.txt
folder2/xyz4.txt
folder3/abc5.txt
тогда если я дам */abc*
Я ищу вывод:
folder1/abc1.txt
folder1/abc2.txt
folder2/abc3.txt
folder3/abc5.txt
Я попробовал список записей, но он позволяет мне фильтровать содержимое текущей папки.
Конечно, вы можете проходить рекурсивно с помощью встроенного цикла:
#include <QDir>
#include <QFileInfoList>
#include <QString>
#include <QStringList>
#include <QDebug>
void traverse(const QString &pattern, const QString &dirname, int level)
{
QDir dir(dirname);
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks | QDir::NoDot | QDir::NoDotDot);
static const QStringList stringList = pattern.split('/');
foreach (QFileInfo fileInfo, dir.entryInfoList(stringList.mid(level, 1))) {
if (fileInfo.isDir() && fileInfo.isReadable())
traverse(pattern, fileInfo.filePath(), level+1);
else if (stringList.size() == (level + 1))
qDebug() << fileInfo.filePath();
}
}
int main()
{
traverse("*/abc*", ".", 0);
return 0;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
qmake && make && ./main
"./folder1/abc1.txt""./folder1/abc2.txt""./folder2/abc3.txt""./folder3/abc5.txt"