Рекурсивный поиск файлов на Qt

Категория: Qt Комментариев: 0

Ранее я уже писал о рекурсивном поиске файлов на WinAPI. Вот кроссплатформенная реализация на Qt.
Мне известны два способа рекурсивно искать файлы во вложенных подпапках с помощью Qt:
1. С помощью стандартного рекурсивного вызова функции чтения содержимого папок;
2. С помощью класса QDirIterator.

Функция, представленная ниже, ищет и выводит на экран имена файлов в текущем каталоге, а если находит каталог, то входит в него и отображает содержимое этого каталога, и так далее.

void ListDirRecursive(QString directory)
{
 QDir dir(directory);
 foreach(QString entry, dir.entryList())
 {
 if ((entry == ".") || (entry == ".."))
 continue;
 QDir subdir = QDir(dir.absoluteFilePath(entry));
 if (subdir.exists())
 ListDirRecursive(subdir.absolutePath());
 qDebug() << subdir.absolutePath();
 }
}

Более элегантный способ искать файлы во вложенных каталогах — использовать класс QDirIterator.
В качестве входных параметров классу QDirIterator можно передать начальный каталог, с которого нужно начинать перечислять вложенные файлы, фильтр файлов для поиска и дополнительные флаги.
Фильтр файлов указывается по аналогии с классом QDir. В примере ниже QDir::Files | QDir::NoSymLinks означает, что нужно искать файлы и не отображать символьные ссылки.
Дополнительные флаги могут быть следующими:
QDirIterator::NoIteratorFlags — стандартный флаг, обозначающий отсутствие флагов;
QDirIterator::Subdirectories — флаг, указывающий, что нужно перечислять файлы и в подпапках;
QDirIterator::FollowSymlinks — флаг указывает, что символьные ссылки тоже нужно обрабатывать.

Так выглядит функция, которая рекурсивно ищет файлы в подкаталогах с использованием класса QDirIterator:

void ListDirRecursive2(QString directory)
{
 QDirIterator iterator (directory, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
 while(iterator.hasNext())
 {
 iterator.next();
 qDebug() << iterator.fileInfo().absoluteFilePath();
 }
}
Автор: Кто-то   @   30 декабря 2011 Комментариев: 0
Метки : , ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

Комментариев: 0

Комментариев к этой записи поке нет. Ваш комментарий будет первым.
оставить комментарий

Предыдущая запись
«
Следующая запись
»