Calcular el tamaño que nos ocupa un directorio

Podemos hacer lo siguiente:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TSearchRec sr;
  double tamanyo=0;
  int iAttributes = 0;

  if (FindFirst("c:\\windows\\*.*", iAttributes, sr) == 0)
  {
    tamanyo += sr.Size;
    while (FindNext(sr) == 0)
      tamanyo += sr.Size;
  }
  FindClose(sr);
  ShowMessage(tamanyo);
}

Si este directorio contiene otros subdirectorios, y también queremos conocer el espacio que nos ocupan en disco…

#include "Unit1.h"
//--------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
double size=0;
//--------------------------------------------------
double tamanyo(AnsiString Path)
{
  TSearchRec R;
  int F = FindFirst(Path + "\\*", faAnyFile, R);
  while(F==0)
  {
    if(R.Name != "." && R.Name != "..")
    {
      if(R.Attr == faDirectory)
        tamanyo(Path + "\\" + R.Name);
      else
        size+= R.Size;
    }
    F = FindNext(R);
  }
  FindClose(R);
  return size;
}

__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
Label1->Caption = AnsiString(tamanyo("c:\\mirc"));
}