crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Тема закрытаНачать новую тему
> Поиск файлов и папок, рекурсивный.
Гость_йцукен_*
сообщение 31.10.2007, 11:03
Сообщение #1





Гости








    


Как реализовать рекурсивный поиск?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.10.2007, 11:19
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Если без использования фильтров, то так:
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;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_йцукен_*
сообщение 31.10.2007, 11:23
Сообщение #3





Гости








    


А если с фильтрами, то чем отличается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.10.2007, 11:28
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Наличием фильтра. :)
Ну и тем, что с ними нужно быть аккуратным, так как из-за них можно не увидеть папки, соответственно ни о какой рекурсии не будет речи.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_йцукен_*
сообщение 31.10.2007, 11:29
Сообщение #5





Гости








    


Спасибо за помощь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
CodeHunter
  опции профиля:
сообщение 23.9.2010, 12:11
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.8.2010
Пользователь №: 1982

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(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
  опции профиля:
сообщение 23.9.2010, 13:13
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


CodeHunter, это будет на всех целевых платформах работать? Где-то краем уха слышал, что есть какие-то ограничения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 23.9.2010, 13:18
Сообщение #8


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


CodeHunter, смотри на дату. QDirIterator на тот момент не существовало
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
CodeHunter
  опции профиля:
сообщение 23.9.2010, 17:19
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 33
Регистрация: 26.8.2010
Пользователь №: 1982

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 23.9.2010, 13:18) *
CodeHunter, смотри на дату. QDirIterator на тот момент не существовало


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

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

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


Линк в студию ! Никогда подобного не слышал !
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 23.9.2010, 17:44
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


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

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

???
написал бы
"Народ сейчас появилась новая более оптимальная возможность" и я уверен тебе бы сказали спасибо...
а так как написал - как будто хочешь Эдика задеть что ли. Если я ошибаюсь поправь меня.
Думаю у меня не у одного такие впечатления.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 19:24