Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поиск файлов и папок
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
йцукен
Как реализовать рекурсивный поиск?
ViGOur
Если без использования фильтров, то так:
bool FindFileAndDir( QString szDir)
{
    qint16 qnFileCount = 0;
    QDir dir( szDir);
    foreach( QFileInfo fi, dir.entryInfoList())
    {
        QString szFileName = fi.absoluteFilePath();
        if( fi.isDir())
        {
            if( fi.fileName()=="." || fi.fileName()=="..")
                continue;

            FindFileAndDir( szFileName);
        }
        if( fi.isFile())
        {
            qnFileCount++;
        }
    }
    qDebug( "Dir: szDir: %s, File count: %d", qPrintable( szDir), qnFileCount);

    return true;
}

int main(int argc, char *argv[])
{
    QString szDir="c:\\windows\\system32\\drivers";
    FindFileAndDir( szDir);

    return 0;
}
йцукен
А если с фильтрами, то чем отличается?
ViGOur
Наличием фильтра. :)
Ну и тем, что с ними нужно быть аккуратным, так как из-за них можно не увидеть папки, соответственно ни о какой рекурсии не будет речи.
йцукен
Спасибо за помощь
CodeHunter
Цитата(ViGOur @ 31.10.2007, 11:19) *
foreach( QFileInfo fi, dir.entryInfoList())
{
QString szFileName = fi.absoluteFilePath();
if( fi.isDir())
{
if( fi.fileName()=="." || fi.fileName()=="..")
continue;

FindFileAndDir( szFileName);
}
if( fi.isFile())
{
qnFileCount++;
}
}


Плохой пример !

Вызов dir.entryInfoList() внутри папки например "C:\Windows\System32" повесит тебе прогу минут на 5 !!
Лутше использовать QDirIterator !!

QDirIterator it("С:\Windows\System32",QDirIterator::Subdirectories);
while (it.hasNext())
{
qDebug() << it.next();
// здесь можна обработать сообщения пришедшие форме !!!
}


Litkevich Yuriy
CodeHunter, это будет на всех целевых платформах работать? Где-то краем уха слышал, что есть какие-то ограничения.
igor_bogomolov
CodeHunter, смотри на дату. QDirIterator на тот момент не существовало
CodeHunter
Цитата(igor_bogomolov @ 23.9.2010, 13:18) *
CodeHunter, смотри на дату. QDirIterator на тот момент не существовало


Если следовать твоей мысли то зачем тогда новое вообще писать есть же ответы на Qt 3

Я просто написал как будет правильнее на данный момент!

Цитата(Litkevich Yuriy @ 23.9.2010, 13:13) *
Где-то краем уха слышал, что есть какие-то ограничения.


Линк в студию ! Никогда подобного не слышал !
kwisp
извиниье, не в тему:
Цитата(CodeHunter @ 23.9.2010, 18:19) *
Я просто написал как будет правильнее на данный момент!

зачем тогда писал
Цитата(CodeHunter @ 23.9.2010, 13:11) *
Плохой пример !

???
написал бы
"Народ сейчас появилась новая более оптимальная возможность" и я уверен тебе бы сказали спасибо...
а так как написал - как будто хочешь Эдика задеть что ли. Если я ошибаюсь поправь меня.
Думаю у меня не у одного такие впечатления.
igor_bogomolov
Цитата(CodeHunter)
Если следовать твоей мысли то зачем тогда новое вообще писать есть же ответы на Qt 3
Никто не против чего то нового и полезного. А против того, что ты не разобравшись даёшь подобные оценки
Цитата(CodeHunter)
Плохой пример !
CodeHunter
Цитата(igor_bogomolov @ 24.9.2010, 8:58) *
ты не разобравшись даёшь подобные оценки


Интересно в чем я не разобрался ?

И никого я не хотел оскорблять просто высказал свое мнение !
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.