Быстрое определение размеров
Задача:
1.Есть папка размером 161 Mb, файлов 12 541, папок 413
2. Нужно определить ее размер наиболее быстрым образом
Решение:
const
Size: cardinal = 0;
type
TMainF = class(TForm)
....
public
{ Public declarations }
procedure Scan (s: string);
end;
var
MainF: TMainF;
implementation
{$R *.DFM}
procedure TMainF.ToolButton1Click(Sender: TObject);
begin
if dl.Directory <> '' then begin
Size := 0;
Scan (dl.Directory);
Label1.Caption := FormatFloat ('###,###,###,###,##0', Size);
end;
end;
procedure TMainF.Scan(s: string);
var
sr: TSearchRec;
r: integer;
OldDir: string;
begin
try
ChDir (s);
r := FindFirst ('*.*', faAnyFile, sr);
while r = 0 do begin
if (sr.Name <> '.') and (sr.Name <> '..') then begin
if (faDirectory and sr.Attr) = faDirectory then begin
OldDir := GetCurrentDir;
Scan (ExpandFileName (sr.Name));
ChDir (OldDir);
end else begin
Inc (Size, sr.Size);
end;
end;
r := FindNext (sr);
end;
finally
FindClose (sr);
end;
end;
end.
Program Files (1 104 011 684 байт) у меня сканировался за 4-5 секунд.
160 метров - не знаю, засечь не успевал. Машина - Athlon 950,
128 ОЗУ, винт - Quantum FireBall 30 Gb.
--------------------------------------------------------------------------------