Быстрое определение размеров
папки с файлами и подкаталогами.

Задача:

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.

--------------------------------------------------------------------------------

Хостинг от uCoz