Главная страница
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.023 c
3-1095044872
tERRORist
2004-09-13 07:07
2004.10.10
Как остановить выполнение запроса в ADO


1-1096248576
Артем К.
2004-09-27 05:29
2004.10.10
Здравствуйте, Мастера. Как разбить строку на лексемы?


4-1093597338
GanibalLector
2004-08-27 13:02
2004.10.10
как проверить жив ли поток???


14-1095918599
Lexxx
2004-09-23 09:49
2004.10.10
Мастера, подскажите, можно ли в XP Home поставить IIS 5.0?


1-1095923924
Arnold
2004-09-23 11:18
2004.10.10
Вопрос по свойствам!!!