Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прогрэс бар для поиска 
V
    Опции темы
Antony41
Дата 10.5.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Всем привет! С прошедшим всех!
Как нужно быть в такой ситуации.

Есть заданный путь для поиска. например (C:\)
Поиск включает в себя поддиректории, и маска может быть любой. (*.mp3 или *.*)
Как создать прогрэс бар?
Сначало произвести поиск всех файлов и потом, те файлы которые не входят в маску исключить и получившее значение будет Max для прогрэса как?
PM MAIL   Вверх
Fhusy
Дата 10.5.2009, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.11.2006

Репутация: нет
Всего: нет



а зачем тебе прогресс бар? и что он будет отображать?
PM MAIL   Вверх
Antony41
Дата 10.5.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



начинаю поиск файлов с определённого места например с ('C:\*.*'), включая поддиректории
Прогрэс должен показывать сколько осталось до окончания поиска
PM MAIL   Вверх
Демо
Дата 10.5.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Antony41 @  10.5.2009,  14:40 Найти цитируемый пост)
Прогрэс должен показывать сколько осталось до окончания поиска 


А как ты определишь конкретное значение до окончания поиска?
Тебе остаётся только лишь имитировать прогрессбар, показывая пользщователю, что программа не висит, а работает.


--------------------
    
PM MAIL ICQ Skype   Вверх
Antony41
Дата 10.5.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



решил проблему

Код

var
Count:Integer=0;

implementation

function GetFileCountTwo(Dir,Mask: string): integer;
var
  fsc: TSearchRec;
  FindResult: Integer;
begin
  Result:=0;
  Dir:=IncludeTrailingBackslash(Dir);
    FindResult := FindFirst(Dir + '*.*', faAnyFile, fsc);
    try
      while FindResult = 0 do
        with fsc do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if (Name <> '.') and (Name <> '..') then
              GetFileCountTwo(Dir + Name, Mask);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              Inc(Count);
          end;
          FindResult := FindNext(fsc);
        end;
    finally
      sysUtils.FindClose(fsc);
    end;
end;


//Cколько файлов есть в определённой папке
function GetFileCount(Dir,Mask: string): integer;
var
  fsc: TSearchRec;
  FindResult: Integer;
begin
  Count:=0;
  Dir:=IncludeTrailingBackslash(Dir);
    FindResult := FindFirst(Dir + '*.*', faAnyFile, fsc);
    try
      while FindResult = 0 do
        with fsc do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if (Name <> '.') and (Name <> '..') then
              GetFileCountTwo(Dir + Name, Mask);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              Inc(Count);
          end;
          FindResult := FindNext(fsc);
        end;
    finally
      sysUtils.FindClose(fsc);
    end;
    Result:=Count;
end;


Код

Showmessage(IntToStr(GetFileCount('C:\', '*.mp3')));


Это сообщение отредактировал(а) Antony41 - 10.5.2009, 16:42
PM MAIL   Вверх
Демо
Дата 10.5.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Э-э... А где тут прогрессбар?


--------------------
    
PM MAIL ICQ Skype   Вверх
kami
Дата 10.5.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Antony41 @  10.5.2009,  14:13 Найти цитируемый пост)
 получившее значение будет Max для прогрэса

Точное время для этого действия оценить нельзя.
Для показа работы, не имеющей конкретной продолжительности используют "бесконечный" ProgressBar, отображающий циклическое пробегание полоски слева направо. Обычно сверху полоски пишут, какое действие/файл находится на данный момент в обработке.

В приведенном тобой коде, как я понял, работа по поиску файлов будет выполняться дважды. Первый раз - для получения max значения, а второй уже для визуального поиска. Нерационально.
PM MAIL WWW   Вверх
AntonN
Дата 11.5.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



Antony41
Цитата

решил проблему

т.е. ты отдаешь себе отчет, что ты только что два раза сделал поиск, сначала чтобы узнать кол-во файлов, а потом сделал такой же поиск, что бы понтово показать поиск с прогрессбаром?


--------------------
user posted image
PM MAIL WWW   Вверх
dumb
Дата 11.5.2009, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



небольшим утешением может быть только то, что второй "проход" будет значительно быстрее за счет кэша. а в общем - конечно же, никто в таких случаях "точный" прогресс не показывает.
PM MAIL   Вверх
Демо
Дата 11.5.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(dumb @  11.5.2009,  02:34 Найти цитируемый пост)
будет значительно быстрее за счет кэша


Это вряд ли-) Я имею ввиду слово "значительно"


--------------------
    
PM MAIL ICQ Skype   Вверх
dumb
Дата 11.5.2009, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(Демо @  11.5.2009,  14:13 Найти цитируемый пост)
Это вряд ли-) Я имею ввиду слово "значительно" 
полагаю, что порядок - это значительно. smile сейчас сделал поиск по диску C: файла *text*. первый проход - 32 секунды. второй - 3 секунды.
иногда приходится искать "иголку" по всем дискам - момент кэширования заметен сразу.

Добавлено через 38 секунд
edit: момент = эффект
PM MAIL   Вверх
Демо
Дата 11.5.2009, 22:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



dumb
Согласен.
В таком случае прогрессбар при повторном поиске вообще не имеет смысла.
У меня на 200 тысячах файлов повторный проход занимает 6 секунд.


--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 12.5.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Данная операция не подвергается прогнозу, если только файлы не проиндексированы.
Возможно в Windows 7 или далее будет доступ к файловой базе через SQL запросы.
А пока файловая система - это непрогнозируемый киш-миш.
Так что бери пример с микрософта и показывай анимированную собачку, вынюхивающую файлы.
PM MAIL   Вверх
Antony41
Дата 12.5.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: 1
Всего: 1



Как же не используется ни где, могу привести, как пример, программы: Clone Remover, Alike File Finder, и др.
Первый поиск передаёт результат в StringList, что выполняет его за 2-3 сек. А у второго совсем другая система. и результат он возвращает в listView. 
Но я с вами согласен лучше использовать полоску. Что то не догадался сразу

Это сообщение отредактировал(а) Antony41 - 28.6.2009, 23:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1086 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.