Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.035 c
3-1095068655
}|{yk
2004-09-13 13:44
2004.10.10
Array в Firebird


3-1094727068
Still Swamp
2004-09-09 14:51
2004.10.10
ADO + MSSQL


14-1095689083
inic
2004-09-20 18:04
2004.10.10
Кто и как использует интерфейсы ?


3-1094803115
/glokk
2004-09-10 11:58
2004.10.10
найти повторяющиеся номера


3-1094836526
BigError
2004-09-10 21:15
2004.10.10
MySQL: VarChar -> Decimal





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский