Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Внизповысить скорость поиска файлов Найти похожие ветки
← →
rar (2006-05-20 20:38) [0]У меня такой вопрос. как можно повысить скорость поиска файлов на диске.
Процедура поиска использует рекурсию. Поиск производится по нескольким расширениям.
Список расширений находится в checkListBox наличие расширения в файле проверяю с помощью Matchesmask.
алгоритм поиска следующий.
все выбранные расширения из Checklistbox помещаю в Stringlist.
затем при поиске проверяю каждый файл на наличие в нем расширения из stringlist
и т.д. может есть что-то более быстрое.
← →
AlexWlad © (2006-05-20 20:40) [1]
> rar (20.05.06 20:38)
> ...все выбранные расширения из Checklistbox помещаю в Stringlist...
Ну и зачем дублировать???
← →
Anatoly Podgoretsky © (2006-05-20 20:45) [2]stringlist работает очень быстро, видимо ты неверно с ним работаешь.
← →
13 (2006-05-20 20:51) [3]вот так помещаю
private
{ Private declarations }
Criterialist:TstringList;
.......
procedure TMainForm.GetCriteria;
var
i:byte;
begin
Criterialist:=TStringList.Create;
for i:=0 to OptionsForm.CheckListBox1.Items.Count-1 do
if OptionsForm.CheckListBox1.Checked[i]=true then
begin
CriteriaList.Add(Optionsform.CheckListBox1.Items[i]);
end;
end;
вот так проверяю
function TMainForm.proverka(StrList:string): boolean;
var
i:byte;
begin
Result:=false;
for i:=0 to CriteriaList.Count-1 do
begin
if Matchesmask(Strlist, CriteriaList.Strings[i]) then Result:=true;
end;
end;
Rashirenie:=AnsiLowerCase(SR.name);
if Proverka(Rashirenie)=true then
добавляю в Listview
← →
rar (2006-05-20 20:54) [4]просто на компе у друга а у него имя другое
← →
Anatoly Podgoretsky © (2006-05-20 21:05) [5]Во первых весь список прогоняется от начала до конца, вне зависимости найдено или нет.
Во вторых а что такое StrList
← →
AlexWlad © (2006-05-20 21:07) [6]
> 13 (20.05.06 20:51) [3]
> добавляю в Listview
А вот с этого места поподробнее. Сколько примерно файлов в результате поиска? Listview при большом к-ве Итемов начинает жутко тормозить.
И еще, если ищешь ТОЛЬКО по расширениям и в них не используются ? и *, тогда имеет смысл перегонять их в СтрингЛист, а во время поиска делать
Strlist.Find(ExtractFileExt(SR.name));
Иначе вполне можно обойтись без
for i:=0 to OptionsForm.CheckListBox1.Items.Count-1 do
if OptionsForm.CheckListBox1.Checked[i]=true then
begin
CriteriaList.Add(Optionsform.CheckListBox1.Items[i]);
end;
← →
rar (2006-05-21 08:18) [7]
> Во вторых а что такое StrList
>
StrList-имя файла проверяемого на наличие в нем расширения.
> если ищешь ТОЛЬКО по расширениям и в них не используются
> ? и *,
Как раз таки используется
> добавляю в Listview
>
>
> А вот с этого места поподробнее.
добавляю такwith ListView1.Items.Add do
begin
Caption:=SR.Name;
и т.д.
end;
> Во первых весь список прогоняется от начала до конца, вне
> зависимости найдено или нет.
А как сделать чтобы не весь? В голову ничего другого не приходит.
← →
Мефисто (2006-05-21 09:32) [8]Перед добавлением инфы
ListView1.Items.BeginUpdate;
По завершении ввода всей инфы
ListView1.Items.EndUpdate
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.016 c