Карта сайтаСсылкиКонтакты

Как проверить свободное место на диске более 2 Gb

PDF Печать
Статьи

Нужно вызвать функцию GetDiskFreeSpaceEx() Windows API и преобразовать возвращенные целые числа Integer в Double, так как целые числа более 2 Гбайт не поддерживаются в Delphi.


function GetDiskFreeSpaceEx(lpDirectoryName: PAnsiChar;
   var lpFreeBytesAvailableToCaller : Integer;
   var lpTotalNumberOfBytes: Integer;
   var lpTotalNumberOfFreeBytes: Integer) : bool;
   stdcall;
   external kernel32
   name 'GetDiskFreeSpaceExA';


procedure GetDiskSizeAvail(TheDrive : PChar;
                            var TotalBytes : double;
                            var TotalFree : double);
var
   AvailToCall : integer;
   TheSize : integer;
   FreeAvail : integer;
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(FloatToStr(TotalBytes));
   ShowMessage(FloatToStr(TotalFree));
end;

 

Добавить комментарий


Защитный код
Обновить