Определение свободного места на диске

Как определить количество свободного места на диске размером более 2 Гбайт?

Для этого потребуется использовать GetDiskFreeSpaceEx() с последующим преобразованием целочисленных значений к типу Double.

GetDiskFreeSpaceEx: function (Directory: PChar; var FreeAvailable,
          TotalSpace: TLargeInteger; TotalFree: PLargeInteger): Bool stdcall = nil;

procedure GetDiskSizeAvail(TheDrive: PChar; var TotalBytes: double;
                           var TotalFree: double);
var
  AvailToCall, TheSize: TLargeInteger;
  FreeAvail: PLargeInteger;
begin
  GetDiskFreeSpaceEx(TheDrive, AvailToCall, TheSize, FreeAvail);
{$IFOPT Q+}
{$DEFINE TURNOVERFLOWON}
{$Q-}
{$ENDIF}
  if TheSize >= 0 then TotalBytes := TheSize
  else if TheSize = -1 then begin
    TotalBytes := $7FFFFFFF;
    TotalBytes := TotalBytes * 2;
    TotalBytes := TotalBytes + 1;
  end else begin
    TotalBytes := $7FFFFFFF;
    TotalBytes := TotalBytes + abs($7FFFFFFF - TheSize);
  end;
  if AvailToCall >= 0 then TotalFree := AvailToCall
  else if AvailToCall = -1 then begin
    TotalFree := $7FFFFFFF;
    TotalFree := TotalFree * 2;
    TotalFree := TotalFree + 1;
  end

  else begin
    TotalFree := $7FFFFFFF;
    TotalFree := TotalFree + abs($7FFFFFFF - AvailToCall);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TotalBytes: double;
  TotalFree: double;
begin
  GetDiskSizeAvail('C:\', TotalBytes, TotalFree);
  ShowMessage('Total bytes: ' + FloatToStr(TotalBytes));
  ShowMessage('Total bytes free: ' + FloatToStr(TotalFree));
end;
Примечание
Функция GetDiskFreeSpaceEx описана в SysUtils.