Russian Qt Forum
Ноябрь 05, 2024, 22:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4 5   Вниз
  Печать  
Автор Тема: Остановка рекурсии поиска файлов [РЕШЕНО]  (Прочитано 26301 раз)
daimon
Гость
« Ответ #30 : Март 13, 2012, 16:41 »

логику понял - смотрим не по файлам, а директориям и выставляем процент исходя из пройденной директории
Записан
V1KT0P
Гость
« Ответ #31 : Март 13, 2012, 16:41 »

entryList явно не дешевый вызов и делать его дважды-трижды не следует
Да, эту строку удалить:
Код:
countFiles += dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot).count();
А вот тут изменить:
Код:
foreach (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)){
    ++countFiles;
    dirs.push(path + QDir::separator() + subDir);
}
Но все равно прогресс будет плохим если будет большая вложенность директорий. Тогда прогресс быстро достигнет 90% и потом медленно будет двигаться к 100% и если попадется директория с большим количеством чем было найдено то прогресс уменьшится до половины.
Записан
daimon
Гость
« Ответ #32 : Март 13, 2012, 16:51 »

да теперь вроде прогрессбар пришёл в порядок, показывает хоть 99 и уже на финише только 100

да но всё равно пока есть  dir.entryList вызов 2 раза

может в циклах просто проверять есть ли это файл (по фильтру) или директория
и вообще всё в один цикл закинуть: заталкивание файлов в список и забивание стека новыми директориями
« Последнее редактирование: Март 13, 2012, 16:53 от daimon » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #33 : Март 13, 2012, 16:53 »

Борьба с прогрессом непонятна. В любом случае сколько осталось - неизвестно, так зачем показывать пользователю заведомо неправдивые проценты? Лучше давать 0 (индикатор бегает туда-сюда) + где-то в уголке малевать сколько файлов поймано
Записан
daimon
Гость
« Ответ #34 : Март 13, 2012, 16:54 »

Борьба с прогрессом непонятна. В любом случае сколько осталось - неизвестно, так зачем показывать пользователю заведомо неправдивые проценты? Лучше давать 0 (индикатор бегает туда-сюда) + где-то в уголке малевать сколько файлов поймано
вариант))
Записан
V1KT0P
Гость
« Ответ #35 : Март 13, 2012, 16:55 »

да теперь вроде прогрессбар пришёл в порядок, показывает хоть 99 и уже на финише только 100

да но всё равно пока есть  dir.entryList вызов 2 раза

может в циклах просто проверять есть ли это файл (по фильтру) или директория
и вообще всё в один цикл закинуть: заталкивание файлов в список и забивание стека новыми директориями
Ну дык вот так вроде с одним вызовом должно работать:
Код:
        foreach (QString file, dir.entryList(filters)) {
            if (QFileInfo(dir, file).isDir()){
                ++countFiles;
                dirs.push(path + QDir::separator() + dir);    
            } else {
                listFiles << QFileInfo(dir, file).absoluteFilePath();
            }
        }
Борьба с прогрессом непонятна. В любом случае сколько осталось - неизвестно, так зачем показывать пользователю заведомо неправдивые проценты? Лучше давать 0 (индикатор бегает туда-сюда) + где-то в уголке малевать сколько файлов поймано
Да я того же мнения.

изменения: поправил опечатку.
« Последнее редактирование: Март 13, 2012, 16:57 от V1KT0P » Записан
daimon
Гость
« Ответ #36 : Март 13, 2012, 17:07 »

не работает по 2 причинам:

1. нет оператора + для QDir (думаю нужно возвращать путь директории)
2. при таком условии форича мы не видим папок вроде (всё на фильтре держится)


думаю форич поставить на весь список директории кроме "." и ".."

но тут делема, что прийдёться всегда проверять принадлежит ли разрешение файла списку фильтров
Записан
Странник
Гость
« Ответ #37 : Март 13, 2012, 20:23 »

почему не использовать QDirIterator?
Записан
daimon
Гость
« Ответ #38 : Март 14, 2012, 13:22 »

этот код при большом поиске не находит около 100 файлов
Код
C++ (Qt)
foreach (QString file, dir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot))
{
QFileInfo temp(dir,file);
 
if(temp.isDir())
dirs.push(path + QDir::separator() + file);
else if(m_FilterNames.contains("*." + temp.completeSuffix()))
listFiles << QFileInfo(dir, file).absoluteFilePath();
}
 

а так на 1 файл больше
Код
C++ (Qt)
foreach (QString file, dir.entryList(filters)) {
           listFiles << QFileInfo(dir, file).absoluteFilePath();
       }
 
       foreach (QString subDir, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)){
           dirs.push(path + QDir::separator() + subDir);
       }

остальная часть кода ниже

« Ответ #28 : Март 13, 2012, 15:33 »

что не так подскажите?
Записан
V1KT0P
Гость
« Ответ #39 : Март 14, 2012, 13:28 »

что не так подскажите?
А чем отличаются не найденные файлы с найденными? И чем отличается лишний найденный от остальных нелишних?
Записан
daimon
Гость
« Ответ #40 : Март 14, 2012, 13:31 »

что не так подскажите?
А чем отличаются не найденные файлы с найденными? И чем отличается лишний найденный от остальных нелишних?

значит total commander нашел, а я нет и с ним сравниваю

как-бы точно 50000 сравнить не могу, смотрю по количеству найденных))
Записан
V1KT0P
Гость
« Ответ #41 : Март 14, 2012, 13:33 »

что не так подскажите?
А чем отличаются не найденные файлы с найденными? И чем отличается лишний найденный от остальных нелишних?

значит total commander нашел, а я нет и с ним сравниваю
Может там скрытые файлы есть, системные, ссылки и т.д. А ты их естественно пропускаешь.
Записан
daimon
Гость
« Ответ #42 : Март 14, 2012, 13:35 »

что не так подскажите?
А чем отличаются не найденные файлы с найденными? И чем отличается лишний найденный от остальных нелишних?

значит total commander нашел, а я нет и с ним сравниваю
Может там скрытые файлы есть, системные, ссылки и т.д. А ты их естественно пропускаешь.

исключено (проверяю по фильтру *.h *.cpp), на данный момент не могу понять разницу двух алгоритмов - один из них верно почти ищет (лишний файл находит), другой - ошибается очень сильно (всё в одном цикле)
« Последнее редактирование: Март 14, 2012, 14:03 от daimon » Записан
V1KT0P
Гость
« Ответ #43 : Март 14, 2012, 14:08 »

что не так подскажите?
А чем отличаются не найденные файлы с найденными? И чем отличается лишний найденный от остальных нелишних?

значит total commander нашел, а я нет и с ним сравниваю
Может там скрытые файлы есть, системные, ссылки и т.д. А ты их естественно пропускаешь.

исключено (проверяю по фильтру *.h *.cpp), на данный момент не могу понять разницу двух алгоритмов - один из них верно почти ищет (лишний файл находит), другой - ошибается очень сильно (всё в одном цикле)
Дык выложи название лишнего файла и пропущенных файлов.
Записан
daimon
Гость
« Ответ #44 : Март 14, 2012, 14:11 »

самое смешное на маленьком количестве файлов - работают оба нормально, но свыше 50000 файлов - ошибаются, отследить потерю нереально))), вот почему и прошу посмотреть разницу в коде

можно попробовать писать найденные файлы в текстовый файл а потом какой-то софтиной сравнивать текст....
Записан
Страниц: 1 2 [3] 4 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.158 секунд. Запросов: 23.