Форум: "Основная";
Текущий архив: 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