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)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.