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;