QT Как получить доступ к определенному каталогу в подкаталогах с помощью QDirIterator? - PullRequest
0 голосов
/ 24 января 2019

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

YYYY_MM_DD
    XXX
    XXX
    XXX
    Target
        .hdr files
    XXX
    XXX
        more .hdr files but do not want to process
YYYY_MM_DD
    XXX
    XXX
    XXX
    Target
        .hdr files
    XXX
    XXX
         more .hdr files but do not want to process

У меня есть данные за три месяца, и мне нужно добраться до папки Target и папки Targetтолько.Они содержат файлы, которые нам нужны, и в некоторых других папках также есть файлы .hdr, которые нам не нужны.

Сначала я использовал QDirIterator, например:

QDirIterator it(inputDir, QStringList() << "*.hdr", QDir::Files, QDirIterator::Subdirectories);

Однако, запустив свою программу, я понял, что это будет собирать и другие файлы .hdr, и яне нужно обрабатывать эти файлы.Вот код, который я написал, чтобы найти все файлы .hdr:

QDirIterator it(inputDir, QStringList() << "*.hdr", QDir::Files, QDirIterator::Subdirectories);
std::vector<std::string> files;

while(it.hasNext())
{   
    files.push_back(it.next().toStdString());
}

return files;

Как я могу пройти по каталогам, но только взять файлы в папке Target?

1 Ответ

0 голосов
/ 25 января 2019

Вероятно, попробуйте, как сказано ниже. Это грубый код, может потребоваться еще несколько проверок.

//FILTER THE SPECIFIC TARGET DIRECTORY.
QStringList filterFolder = {"TARGETFOLDERNAME"};
QDir directory("BASE DIRECTORY OF SEARCH");
QFileInfoList foldersTobeIterated = directory.entryInfoList(filterFolder);

//ITERATE THE FILTERED DIRECTORIES.
std::vector<std::string> files;
for(auto folder : foldersTobeIterated)
{
    QDirIterator it(folder.absoluteFilePath(), QStringList() <<"*.txt", QDir::Files,QDirIterator::Subdirectories);
    while(it.hasNext())
    {
        files.push_back(it.next().toStdString());
    }
}
...