Есть функция для определения размера папки (не ищет скрытые, системные и архивные файлы, а только нормальные файлы). Используется рекурсивный алгоритм, чтобы также просматривать все подкаталоги. Нужно передать только начальный каталог как параметр.
var
DirBytes : integer;
function FolderSize(Dir: string): integer;
var
SearchRec : TSearchRec;
Separator : string;
begin
Result:= 0;
if Copy(Dir, Length(Dir), 1)= '\' then
Separator := ''
else
Separator := '\';
if FindFirst(Dir + Separator + '*.*', faAnyFile, SearchRec) = 0 then begin
if FileExists(Dir + Separator + SearchRec.Name) then begin
DirBytes := DirBytes + SearchRec.Size;
end else if DirectoryExists(Dir + Separator + SearchRec.Name) then begin
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin
FolderSize(Dir + Separator + SearchRec.Name) ;
end;
end;
while FindNext(SearchRec) = 0 do begin
if FileExists(Dir + Separator + SearchRec.Name) then begin
DirBytes := DirBytes + SearchRec.Size;
end else if DirectoryExists(Dir + Separator + SearchRec.Name) then
begin
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin
FolderSize(Dir + Separator + SearchRec.Name) ;
end;
end;
end;
end;
FindClose(SearchRec) ;
Result:= DirBytes;
end;
Комментарии