Вниз
Скачать: CL | DM;

Поиск файлов   Найти похожие ветки 

← →
Ezhik   (2004-09-24 01:52) [0]

Добрый вечер. У меня есть рекурсивная функция, которая ищет все файлы и папки в заданой дериктории и поддериктории. Указиваю я начальную дерикторию с помошью компоненты DirectoryList. Эта функция визивается при событии DirectoryListBox1Change. При креейте моей формы я задаю начальную дерикторию С:\ и сразу же вызивается обработчик события DirectoryListBox1Change, который в свою очередь вызивает мою функцию поиска. Буквально через несколько секунд весь найденый список файлов (уменя  более 30000) уже передомною. Когда же я вручную меняю дерикторию, также происходит тот же сценарий, НО, ищет в томже С:\ более 2.5 мин. Как такое может быть??? :(
Вот моя функция:

procedure findall(dir:string);
var
rec: TSearchRec;
res: integer;
begin
 res:=FindFirst(dir + "\*.*",faAnyFile,rec);
 res:=findNext(rec);
 While res=0 do                                  
 begin
   if (rec.Attr=faDirectory) and ((rec.Name=".")or(rec.Name="..")) then
   begin
     Res:=FindNext(rec);
     Continue;
   end;
   if (rec.Attr= faDirectory) then      
   begin
     Form1.StringGrid1.RowCount:= Form1.StringGrid1.RowCount + 1;
     Form1.StringGrid1.Cells[1,Form1.StringGrid1.RowCount-2]:= "+ " + dir + "\" + rec.Name + "\";
     Form1.StringGrid1.Cells[0,Form1.StringGrid1.RowCount-2]:= "Ïàïêà";
     findall(dir + "\" + rec.Name);
     Res:=FindNext(rec);
     Continue;
   end
   else
   begin
     Form1.StringGrid1.RowCount:= Form1.StringGrid1.RowCount + 1;
     Form1.StringGrid1.Cells[0,Form1.StringGrid1.RowCount-2]:= "File";
     Form1.StringGrid1.Cells[1,Form1.StringGrid1.RowCount-2]:= "- " + dir + "\" + rec.Name;
     Form1.StringGrid1.Cells[2,Form1.StringGrid1.RowCount-2]:= IntToStr(rec.Size);
     if Form1.CheckBox1.Checked then
     try
       Form1.StringGrid1.Cells[3,Form1.StringGrid1.RowCount-2]:= DateTimeToStr(FileDateToDateTime(FileAge(ShortName+rec.Name)));
     except
       try
         Form1.StringGrid1.Cells[3,Form1.StringGrid1.RowCount-2]:= DateTimeToStr(FileTimeToDateTime(rec.FindData.ftCreationTime));
       except
         Form1.StringGrid1.Cells[3,Form1.StringGrid1.RowCount-2]:= "error";
       end;
     end;
   end;
   Res:=FindNext(rec);
   Application.ProcessMessages;
   if Application.Terminated then Break;
   WaitForm.Caption:= IntToStr(Form1.StringGrid1.RowCount - 2);
 end;
 FindClose(rec);
end;


← →
DiamondShark ©   (2004-09-24 02:02) [1]

Так она попадает на директории . и .. и рекурсивно в них ищет.


← →
Ezhik   (2004-09-24 02:11) [2]

Правильно, но почему при креейте мгновенно, а при ручном изменении ооочень долго ищет??? Хоть последовательность таже и ничего лишнего.


← →
Ezhik   (2004-09-24 17:49) [3]

Удалено модератором
Примечание: Создание пустых сообщений



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.021 c
14-1095948626
Nikolay M.
2004-09-23 18:10
2004.10.10
Масяня вернулась!


9-1086853058
Серый
2004-06-10 11:37
2004.10.10
Загрузка ботов


3-1094716608
Klerk
2004-09-09 11:56
2004.10.10
Два приложения используют BDE.


1-1096267868
Studentik
2004-09-27 10:51
2004.10.10
Помогите разобраться с паузой.


1-1096205173
SeriousSam
2004-09-26 17:26
2004.10.10
Поле для произвольного кол-ва объектов




   Наверх