Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: 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 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.055 c
1-1095853264
M-Alex
2004-09-22 15:41
2004.10.10
Деление


3-1095014941
еще один Виктор
2004-09-12 22:49
2004.10.10
формат даты в фильтре


4-1093965391
Arnold
2004-08-31 19:16
2004.10.10
Известен Handle окна, как узнать какой его тип (TForm,TButton..)


14-1094701395
Sirus
2004-09-09 07:43
2004.10.10
Что такое контрольная сумма файлов???


3-1094996828
Артем Владимирович
2004-09-12 17:47
2004.10.10
Взаимодействие приложения с удаленной БД