Obtener informacion de un disco (espacio libre, sectores, etc)  

Enviado Por: Q3 Team
Web : http://www.q3.nu
Email: dlib@q3.nu
Fecha: 05/05/20

Truco accedido 91 veces

 


Usa esta función:


 function LibreEnDisco( const Drive : Char ) : LongInt;
 var
    lpRootPathName          : PChar;	{ address of root path }
    lpSectorsPerCluster     : DWORD;	{ address of sectors per cluster }
    lpBytesPerSector        : DWORD;	{ address of bytes per sector }
    lpNumberOfFreeClusters  : DWORD;	{ address of number of free clusters }
    lpTotalNumberOfClusters : DWORD;	{ address of total number of clusters }
 begin
       lpRootPathName := PChar( Drive + ':\' );
       if Windows.GetDiskFreeSpace( lpRootPathName,
                                    lpSectorsPerCluster,
                                    lpBytesPerSector,
                                    lpNumberOfFreeClusters,
                                    lpTotalNumberOfClusters ) then
          Result := lpNumberOfFreeClusters * lpBytesPerSector * lpSectorsPerCluster
       else
          Result := -1;
 end;



Un ejemplo de llamada:


 	Label1.Caption:=IntToStr( LibreEnDisco('c') );



Modificandola un poco puedes obtener el resto de información que nos devuelve GetDiskFreeSpace


Con el paso del tiempo, esta función ha quedado un poco obsoleta, ya que sólo devuelve tamaños de hasta 2GB.
Para solucionarlo, basta con cambiar la definición del valor de retorno a int64 en lugar de LongInt:

 function LibreEnDisco( const Drive : Char ) : int64;