Como calcular o tamanho de um diretório
Tente a seguinte função, que procura por arquivos “normais”, além de ocultos, de sistema e compactados. Usa um algoritmo recursivo para procurar em todos os sub-diretórios. Apenas forneça um diretório inicial como parâmetro.
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;