Для этого потребуется использовать 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;
Примечание