PDA

Ver la Versión Completa : Espacio del disco duro


SaraTorres
24-10-2017, 20:08:13
Hola chicos
Con qué código puedo obtener el espacio usado y espacio libre del disco C:\ pero en Gb?

Si alguien lo tiene y por favor me lo comparte, se lo agradezco desde ya.
Cuídence :)

Casimiro Notevi
24-10-2017, 20:25:20
https://www.clubdelphi.com/foros/showthread.php?t=49476

ecfisa
24-10-2017, 21:19:18
Hola.

Otra opción es usar la función API GetDiskFreeSpaceEx (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364937(v=vs.85).aspx).


...
procedure GetDiskInfoSpace( Disk: string; var TotalBytes, FreeBytes: Int64 );
const
GB = 1024*1024*1024;
begin
Disk := IncludeTrailingPathDelimiter(Disk);
if not GetDiskFreeSpaceEx(PChar(Disk), FreeBytes, TotalBytes, nil) then
raise Exception.Create( SysErrorMessage(GetLastError));
TotalBytes := TotalBytes div GB;
FreeBytes := FreeBytes div GB;
end;


Ejemplo de uso:


procedure TForm1.Button1Click(Sender: TObject);
var
FreeBytes,
TotalBytes: Int64;
begin
GetDiskInfoSpace('C:\', TotalBytes, FreeBytes);
ShowMessageFmt('Capacidad: %d Gb. %sEspacio libre: %d Gb.', [ TotalBytes, #$A, FreeBytes ]);
end;


Saludos :)

SaraTorres
26-10-2017, 06:40:00
Hola ecfisa :)
Estuve probando el código y funcionó a la perfección.

Ahora, el resultado me lo da en enteros pero ¿cómo puedo hacerlo que me de con decimales el espacio libre?
Ejemplo de espacio libre: 33,5 GB

Gracias por tu tiempo.

Casimiro Notevi
26-10-2017, 10:52:50
http://www.delphibasics.co.uk/RTL.asp?Name=ShowMessageFmt

ecfisa
26-10-2017, 14:52:58
Hola.

...Ahora, el resultado me lo da en enteros pero ¿cómo puedo hacerlo que me de con decimales el espacio libre?...

En ese caso vas a tener que cambiar el tipo de los parámetros:

procedure GetDiskInfoSpace( Disk: string; var prFreeBytesAvailable,
prTotalNumberOfBytes, prTotalNumberOfFreeBytes: Double );
const
GB = 1024*1024*1024;
var
FreeBytesAvailable ,
TotalNumberOfBytes,
TotalNumberOfFreeBytes : TLargeInteger;
begin
Disk := IncludeTrailingPathDelimiter(Disk);

if not GetDiskFreeSpaceEx(PChar(Disk), FreeBytesAvailable,
TotalNumberOfBytes, @TotalNumberOfFreeBytes) then
raise Exception.Create( SysErrorMessage(GetLastError));

prFreeBytesAvailable := FreeBytesAvailable / GB;
prTotalNumberOfBytes := TotalNumberOfBytes / GB;
prTotalNumberOfFreeBytes := TotalNumberOfFreeBytes / GB;
end;

// Ej. uso:
procedure TForm1.Button1Click(Sender: TObject);
var
szAvailable, szTotal, szFree: Double;
begin
GetDiskInfoSpace('C:', szAvailable, szTotal, szFree );

ShowMessage(FormatFloat('Espacio total: 0.00', szTotal) + #$A +
FormatFloat('Espacio libre: 0.00', szFree) + #$A +
FormatFloat('Espacio libre disponible: 0.00', szAvailable));
end;

SaraTorres
26-10-2017, 18:29:43
Eres un genio ecfisa :)
Te lo agradezco (pero no)