Сканирование папок

sn@ke

Member
08.10.2006
21
0
#1
Есть программа которая ищет дубликаты файлов на диске в указанных папках. В Windows XP она отрабатывает нормально в Windows Vista/7 сканирование папок виснет.

Вот часть кода отвечающее за сканирование папок и построение дерева каталогов:

Код:
 //Scaning of folders and files for creation arrays FoldersList and FilesList
Form1.Label2.Caption := 'Scaning folders:';
Form1.Status.Left := LabelRP(Form1.Label2);
Form1.Status.Caption := '';
Form1.Label4.Caption := 'Current folder:';
Form1.ProgressBar1.Position:=0;
Form1.Label5.Left := LabelRP(Form1.Label4);
Form1.Repaint;
i := 1;
while (i < Length(FoldersTree)) and (not ThreadTerminated) do
begin
Str(i, S1);
Str(Length(FoldersTree) - 1, S2);
Form1.Status.Caption := S1 + ' of ' + S2 + ' ';
Form1.Label5.Caption := GetPath(i);
Form1.ProgressBar1.Max:=StrToInt(S2);
Form1.ProgressBar1.Position:=StrToInt(S1);
SearchResult := FindFirst(GetPath(i) + '*', faAnyFile, F);
while (SearchResult = 0) and (not ThreadTerminated) do
begin
if (F.Name <> '.') and (F.Name <> '..') then
if (F.Attr and faDirectory) = faDirectory then
begin
if ScanSubfolders then
begin
SetLength(FoldersTree, Length(FoldersTree) + 1);
FoldersTree[Length(FoldersTree) - 1].Name := F.Name;
FoldersTree[Length(FoldersTree) - 1].Parent := i;
end;
end 
else
begin
SetLength(FilesList, Length(FilesList) + 1);
FilesList[Length(FilesList) - 1].Double := 0;
FilesList[Length(FilesList) - 1].Folder := i;
FilesList[Length(FilesList) - 1].Time := F.Time;
FilesList[Length(FilesList) - 1].Size := F.Size;
FilesList[Length(FilesList) - 1].Name := F.Name;
end;
SearchResult := FindNext(F);
end;
FindClose(F);
Inc(i);
end;
Подскажите как реализовать, чтобы это работало во всех версиях Windows